我有一个数据框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
但这真的是最简单(和最正确)的方式吗?
答案 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