我的数据框df
看起来像这样
A B C D
1 78 12 43 12
2 23 12 42 13
3 14 42 11 99
4 49 94 27 72
我需要将前两列转换成一个看起来完全像这样的列表:
[[1]]
[1] 78 12
[[2]]
[1] 23 12
[[3]]
[1] 14 42
[[4]]
[1] 49 94
基本上是什么
list(c(78, 12), c(23, 12), c(14, 42), c(49, 94)
会这样做。我试过这个
lapply(as.list(1:dim(df)[1]), function(x) df[x[1],])
以及
lapply(as.list(1:nrow(df)), function(x) df)
但那略有不同。 有什么建议吗?
答案 0 :(得分:5)
您可以尝试Map
:
Map(c, df$A, df$B)
[[1]]
[1] 78 12
[[2]]
[1] 23 12
[[3]]
[1] 14 42
[[4]]
[1] 49 94
答案 1 :(得分:0)
如果感兴趣,可以使用foreach
包完成此操作:
library(foreach)
foreach(i=seq.int(nrow(df))) %do% (c(df[[i]][1], df[[i]][2]))
foreach
默认返回一个列表。代码沿着行向下运行并从第一列和第二列中提取元素。
更清晰的阅读版本:
foreach(i=seq.int(nrow(df))) %do% (df[[i]][1:2])
答案 2 :(得分:0)
另一种选择是使用lapply
lapply(seq_len(nrow(df1)), function(i) unlist(df1[i, 1:2], use.names=FALSE))
#[[1]]
#[1] 78 12
#[[2]]
#[1] 23 12
#[[3]]
#[1] 14 42
#[[4]]
#[1] 49 94