2016-08-17 114 views
0

我有一个列表x2,它有两个数据帧x和x1。它们都有4列:n,m,l和k。我想要选择列k具有最大值的数据帧。基于最大列值从列表中选择数据帧

在下面的例子中,我想要被选择的数据帧第二,因为在K列的最后一个值是比用于数据帧1

x <- data.frame(n = c(2, 13, 5),m = c(2, 23, 6),l = c(2, 33, 7),k = c(2, 43, 8)) 
x1 <- data.frame((n = c(2, 3, 15),m = c(2, 3, 16),l = c(2, 3, 17),k = c(2, 3, 18)) 
x2<-list(x,x1) 
+0

这不是一个代码写入服务。请发布您的回答这个问题的尝试并询问具体的相关问题。 – polka

+0

@polka - 我是R的新手,因此无法想象编码会如何去。 –

+0

http://meta.stackexchange.com/q/23628/312334 – polka

回答

1

的k列的最后一个元素使用lapply,遍历的01名单并获取该数据帧的最后一个值k列。使用which.max,发现具有最大以前lapply命令的索引和提取x2

需要注意的是数据帧:此代码不考虑在K列的最后一个值的关系。

x2[which.max(lapply(x2, function(x) tail(x$k, 1)))] 

# [[1]] 
# n m l k 
# 1 2 2 2 2 
# 2 3 3 3 3 
# 3 15 16 17 18 
+0

这是常见的答案,只涉及代码没有任何解释被标记为低质量。我可能会对未来的读者添加一些文本来解释您的代码如何工作有所帮助。 – lmo

1
if(x$k[length(x$k)] >= x1$k[length(x1$k)]) x else x1 

一个如果K列最后一个值大于声明那里 x$k[length(x$k)] - 会从矩阵X

n m l k 
1 2 2 2 2 
2 3 3 3 3 
3 15 16 17 18 
+0

@Imo认真吗?你认为这两个答案质量差还是只有我的?两者都以相同的格式给出,并且您的答案有问题。我的代码很简单,如果声明引用比较值,几乎可以自我解释,如果需要更多的解释,那么肯定使用lapply函数的答案更直观。 – Michal

+0

请注意,您也可以使用'tail(x $ k,1)'来代替'x $ k [length(x $ k)]'。也许这更具可读性,可能没有提高速度。 – lmo