我想在包含B列第一部分的列表中向data.frames添加一个新列D.但我不确定如何在列表中添加到列级别?
创建一些数据
df1 <- data.frame(A = "hey", B = "wass.7", C = "up")
df2 <- data.frame(A = "how", B = "are.1", C = "you")
dfList <- list(df1,df2)
期望的输出:
# a new column removing the last part of column B
[[1]]
A B C D
1 hey wass.7 up wass
[[2]]
A B C D
1 how are.1 you are
对于每个数据框我做了这个,哪个有效
df1$D<-sub('\\..*', '', df1$B)
在我试过的一个函数中,这可能是 没有正确地解决列和返回 &#34;意外的符号......&#34;
dfList <- lapply(rapply(dfList, function(x)
x$D<-sub('\\..*', '', x$B) how = "list"),
as.data.frame)
从Using gsub in list of dataframes with R
复制lapply(rapply)
部分
答案 0 :(得分:2)
检查出来
lapply(dfList, function(x){
x$D <-sub('\\..*', '', x$B);
x
})
[[1]]
A B C D
1 hey wass.7 up wass
[[2]]
A B C D
1 how are.1 you are
答案 1 :(得分:1)
rapply
解决方案确实有效。但是,您需要在 how 参数之前使用逗号来解决错误。此外,您将无法分配一个新列,只能替换现有列。由于rapply
是一个递归调用,它将在嵌套列表中的每个元素上运行gsub
,以便跨所有数据帧的所有列。
否则,请根据@JilberUrbina's answer使用简单的lapply
。
df1 <- data.frame(A = "hey", B = "wass.7", C = "up", stringsAsFactors = F)
df2 <- data.frame(A = "how", B = "are.1", C = "you", stringsAsFactors = F)
dfList <- list(df1,df2)
dfList <- lapply(rapply(dfList, function(x)
sub('\\..*', '', x), how = "list"),
as.data.frame)
dfList
# [[1]]
# A B C
# 1 hey wass up
# [[2]]
# A B C
# 1 how are you