拥有数据框我想根据给定的列索引
分配计算值df <- data.frame(a = c(2,4,7,3,5,3), b = c(8,3,8,2,6,1))
> df
a b
1 2 8
2 4 3
3 7 8
4 3 2
5 5 6
6 3 1
max <- apply(df, 1, which.max)
> max
[1] 2 1 2 1 2 1
addition <- apply(df, 1, sum)
> addition
[1] 10 7 15 5 11 4
然后我将以下结果的一些操作分配给df2
> df2
a b
1 2 10
2 7 3
3 7 15
4 5 2
5 5 11
6 4 1
非常感谢您的想法和帮助。谢谢
答案 0 :(得分:2)
您可以使用cbind
访问每行的选定列:
df2 = df
df2[cbind(1:nrow(df2),max)] = addition
df2
a b
1 2 10
2 7 3
3 7 15
4 5 2
5 5 11
6 4 1
在这里,cbind
返回一个包含2列和6行的矩阵,我们使用矩阵子集对数据帧进行子集化。
答案 1 :(得分:0)
您也可以直接使用矢量化ifelse
:
with(df, cbind.data.frame(a = ifelse(a > b, a + b, a), b = ifelse(a > b, b, a + b)));
# a b
#1 2 10
#2 7 3
#3 7 15
#4 5 2
#5 5 11
#6 4 1