gpt4 book ai didi

r - 通过根据索引列选择其他列中的值来创建新的数据框列

转载 作者:行者123 更新时间:2023-12-04 17:53:39 24 4
gpt4 key购买 nike

这是(一小部分)数据框“df”,其中:

11 个变量“v1”到“v11”

和索引列“indx”(1 <= indx <= 11)。

"indx"是通过另一个数据框的上一步获得的,然后合并到 "df":

> df
v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 indx
1 223 0 95 605 95 0 0 0 0 189 0 10
2 32 0 0 32 0 26 0 0 0 32 0 6
3 0 0 127 95 64 32 0 0 0 350 0 10
4 141 0 188 0 361 0 0 0 0 145 0 3
5 32 0 183 0 127 0 0 0 0 246 0 3
6 67 0 562 0 0 0 0 0 0 173 0 3
7 64 0 898 0 6 0 0 0 0 0 0 3
8 0 0 16 0 32 0 0 0 0 55 0 10
9 0 0 165 0 0 0 312 0 0 190 0 10
10 0 0 210 0 0 0 190 0 0 11 0 7

我需要建立一个新列“vsel”,其值为“v(indx)”

(也就是说,对于第一行:vsel=189 因为 indx=10 和 v10=189)

我通过使用“for”循环成功获得了这个结果:
> df
v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 indx vsel
1 223 0 95 605 95 0 0 0 0 189 0 10 189
2 32 0 0 32 0 26 0 0 0 32 0 6 26
3 0 0 127 95 64 32 0 0 0 350 0 10 350
4 141 0 188 0 361 0 0 0 0 145 0 3 188
5 32 0 183 0 127 0 0 0 0 246 0 3 183
6 67 0 562 0 0 0 0 0 0 173 0 3 562
7 64 0 898 0 6 0 0 0 0 0 0 3 898
8 0 0 16 0 32 0 0 0 0 55 0 10 55
9 0 0 165 0 0 0 312 0 0 190 0 10 190
10 0 0 210 0 0 0 190 0 0 11 0 7 190

代码是:
df$vsel = NA
for (i in seq(1:nrow(df)) )
{
r = df[i,]
ind = r$indx
df[i,"vsel"] = r[ind]
}

...我想避免这个循环(因为当数据框很大时它很慢)。

可能有一种(更快的)R 型方式:

也许与 apply(df, 1, ...) ?

或 ddply ?

谢谢你的帮助 …

最佳答案

矩阵索引来拯救你! R 有一种方法可以完全按照您的描述进行操作。
它简单而强大,但令人惊讶的是鲜为人知。

df$vsel <- df[cbind(1:nrow(df), df$indx)]

关于r - 通过根据索引列选择其他列中的值来创建新的数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com