R基于修改列表中的其他数据帧列来添加列

时间:2018-03-08 15:49:24

标签: r list function lapply

我想在包含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)部分

2 个答案:

答案 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