首页 > 解决方案 > 在 R 中复制 Excel =INDEX() 函数

问题描述

首先,我还不太了解 R 的工作原理。我知道如何在 Excel 中轻松解决这个问题,但想知道 R 中的等效解决方法。

在 R 中,我有一个具有以下结构的数据框:

      Type      Type1      Type2     Type3     Type4     Type5
1        3  -9.697640 21.0876111 21.201925 20.306722 18.431434
2        4  -9.697640 21.0876111 21.201925 20.306722 18.431434
3        5  -9.697640 21.0876111 21.201925 20.306722 18.431434
4        1  -9.697640 21.0876111 21.201925 20.306722 18.431434
5        2  -9.697640 21.0876111 21.201925 20.306722 18.431434

我的目标只是添加最后一列,用于Type确定从其他 5 列中的哪一列中提取值。因此对于第 1 行,Type3将选择 under 的值,而第 2 行将选择 from 的值Type4

要在 Excel 中执行此操作,我可以简单地使用=INDEX(B1:F1,A1). 我在 R 中使用循环之前已经这样做了,但希望能找到更有效的方法。

标签: rindexing

解决方案


apply没有循环或s的解决方案

df$newcol <- df[cbind(seq(nrow(df)), 1 + df$Type)]
df
#   Type    Type1    Type2    Type3    Type4    Type5   newcol
# 1    3 -9.69764 21.08761 21.20192 20.30672 18.43143 21.20192
# 2    4 -9.69764 21.08761 21.20192 20.30672 18.43143 20.30672
# 3    5 -9.69764 21.08761 21.20192 20.30672 18.43143 18.43143
# 4    1 -9.69764 21.08761 21.20192 20.30672 18.43143 -9.69764
# 5    2 -9.69764 21.08761 21.20192 20.30672 18.43143 21.08761

括号内的对象告诉 R 为每一行选择哪一行(左)和哪一列(右)newcol

cbind(seq(nrow(df)), 1 + df$Type)
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6
# [4,]    4    2
# [5,]    5    3

推荐阅读