将多个列添加到数据框

时间:2014-04-21 16:00:22

标签: r dataframe vectorization

我有一个数据框df,例如:

df <- data.frame(a=1:5, b=101:105)

现在向特定行添加单个列有效:

df[4,"d"] <- 5
df
#   a   b  d
# 1 1 101 NA
# 2 2 102 NA
# 3 3 103 NA
# 4 4 104  5
# 5 5 105 NA

但是同时添加多个列不会!

df[3,c("b","f","g")] <- c(6,7,8)
#Error in `*tmp*`[[j]] : recursive indexing failed at level 2

是什么给出了?

当然,实现这一目标的漫长道路是:

df[3,"b"] <- 6
df[3,"f"] <- 7
df[3,"g"] <- 8

但这真的是最简单(和最正确)的方式吗?

2 个答案:

答案 0 :(得分:1)

您可以先为数据分配新列,然后按行(或按列)填充它们。

df[ ,c("e","f","g")] <- NA
df
#   a   b  e  f  g
# 1 1 101 NA NA NA
# 2 2 102 NA NA NA
# 3 3 103 NA NA NA
# 4 4 104 NA NA NA
# 5 5 105 NA NA NA
df[3 ,c("e","f","g")] <- 6:8
df
#   a   b  e  f  g
# 1 1 101 NA NA NA
# 2 2 102 NA NA NA
# 3 3 103  6  7  8
# 4 4 104 NA NA NA
# 5 5 105 NA NA NA

答案 1 :(得分:1)

实现这一目标的更自动化方法如下:

df <- data.frame(a=1:5, b=101:105)
cols <- c("e", "f", "g")
vals <- c(6, 7, 8)
sapply(1:length(cols), function(i)
   df[3, cols[i]] <<- vals[i]
)
df

给出了:

  a   b  e  f  g
1 1 101 NA NA NA
2 2 102 NA NA NA
3 3 103  6  7  8
4 4 104 NA NA NA
5 5 105 NA NA NA