【发布时间】:2015-03-26 21:16:08
【问题描述】:
我在 R 中的数据框有一点问题。这是我的数据框的头。
ID X1 X2 X3 state
1 {026560B0-E0BB-4479-832D-2F5EFFAD9E9F} 56 56 57 2
2 {026560B0-E0BB-4479-832D-2F5EFFAD9E9F} 56 56 57 3
3 {04E6B096-A3CC-4C82-9E01-69BB3D6A0CEF} 55 55 57 2
4 {04E6B096-A3CC-4C82-9E01-69BB3D6A0CEF} 55 55 57 3
5 {089E7170-E221-46D9-AE2B-3CD7FB1FEE0B} 69 70 70 1
6 {089E7170-E221-46D9-AE2B-3CD7FB1FEE0B} 69 70 70 3
我想添加一个新列,其中包含 X1、X2、X3 列的数量,但这取决于状态列。所以我想,如果我的状态是1,我从X1列添加到列号,如果我的状态是2,从X2添加到列号,如果我的状态是3,从X3添加到列号。所以,它看起来像这样:
ID X1 X2 X3 state age
1 {026560B0-E0BB-4479-832D-2F5EFFAD9E9F} 56 56 57 2 56
2 {026560B0-E0BB-4479-832D-2F5EFFAD9E9F} 56 56 57 3 57
3 {04E6B096-A3CC-4C82-9E01-69BB3D6A0CEF} 55 55 57 2 55
4 {04E6B096-A3CC-4C82-9E01-69BB3D6A0CEF} 55 55 57 3 57
5 {089E7170-E221-46D9-AE2B-3CD7FB1FEE0B} 69 70 70 1 69
6 {089E7170-E221-46D9-AE2B-3CD7FB1FEE0B} 69 70 70 3 70
我该怎么做?我已经尝试过 ifelse 和子集,但它不起作用:(
【问题讨论】:
-
之前肯定有人问过这个问题。 (这是一个非常简单的索引任务。)您是否在 SO 或 Google 上进行过任何搜索?
-
如果你的数据叫
data,做data$age <- data[cbind(seq_len(nrow(data)), data$state + 1L)] -
@BondedDust 你是否有一个快速的欺骗来结束这个?
-
我试了一下。我认为提问者应该这样做。我将编辑标题,使其更具描述性。您应该发表您的评论作为答案。我确定有使用双列矩阵索引矩阵但可能还没有用于数据帧的工作示例?
-
@BondedDust 我也找不到。无论哪种方式,我的评论已经包含在下面的答案中。我的名字前没有
@,我也看不到你们的cmets。