用于R中apply()的函数

am46iovg  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(114)

有谁知道如何定义一个函数,用在apply()中,返回以下值?data[i,data[i,300]]。
data[i,300]返回我的数据中的列号,我很想知道每行的列号的内容。
使用for循环很容易解决这个问题,如下所示:对于(i在1中:nrow(数据)){值〈-数据[i,数据[i,300]] }
但是对于10 M的观察来说,它花费了太多的时间。我正在寻找一个使用apply()的快速方法。我感谢你能给我提供的任何帮助。

oyxsuwqo

oyxsuwqo1#

我将假设第300列的每一行都有不同的列号,并且对于每一行,您都要检查第300列指定的列中的值。
样本数据:

set.seed(123)
df <- data.frame(
    c1 = sample(letters, 100, replace = TRUE), 
    c2 = sample(letters, 100, replace = TRUE), 
    c3 = sample(letters, 100, replace = TRUE), 
    c4 = sample(letters, 100, replace = TRUE), 
    c5 = sample(letters, 100, replace = TRUE), 
    d = sample(1:5, size = 100, replace = TRUE)
)
> head(df)
  c1 c2 c3 c4 c5 d
1  o  o  p  b  r 2
2  s  u  w  m  l 2
3  n  e  a  x  o 3
4  c  h  h  q  s 5
5  j  s  h  c  u 1
6  r  j  j  r  f 3

因此,对于上面的示例,假设第6列(列d)给出列号,因此预期输出应为df[1, 2]df[2, 2]df[3, 3]df[4, 5]df[5, 1]df[6, 3],其计算结果为c('o', 'u','a', 's', 'j', 'j')
要得到这个,我们可以用途:

df[cbind(1:nrow(df), df[[6]])] # change 6 with 300 for your case

相关问题