如何使用引用表将行插入R中的数据框?

时间:2015-05-02 05:27:13

标签: r merge dataframe categorization

我有一个数据框(标签),我想用它作为表格的参考或查找表:

V1  V2
1   1   WALKING
2   2   WALKING_UPSTAIRS
3   3   WALKING_DOWNSTAIRS
4   4   SITTING
5   5   STANDING
6   6   LAYING

使用参考表的数据框是(test,ncol = 564,nrow = 2947),其中前三个名称是(test_subject,test_label(num 1-6),data_set),其中test_label(1-6)等于上面引用的字符串。

有人可以帮我弄清楚如何使用我的查找表插入名为" activity_label"的新列。并且该列的每个观察对应于参考表中引用数字的等效字符串。

例如,如果test_label第1行等于5,那么activity_label第1行将等于" Standing"

非常感谢您的帮助!

使用合并方法后:

> test2[1:10, 564: 565]
   angle(Z,gravityMean) activity_label
1            0.04404283        walking
2            0.04134032        walking
3            0.04295217        walking
4            0.03611571        walking
5           -0.09080307        walking
6           -0.08602478        walking
7           -0.07997668        walking
8            0.04372663        walking
9            0.19900166        walking
10           0.20350821        walking

分析剩余dfs的结构

> str(test1)
'data.frame':   2947 obs. of  565 variables:
 $ test_labels                         : int  1 1 1 1 1 1 1 1 1 1 ...
 $ test_subject                        : int  12 12 12 12 4 4 4 12 9 9 ...
 $ observ_set                          : Factor w/ 1 level "test": 1 1 1 1 1 1 1 1 1 1 ...
 $ tBodyAcc-mean()-X                   : num  0.228 0.303 0.237 0.306 0.29 ...

> str(train1)
'data.frame':   7352 obs. of  565 variables:
 $ train_labels                        : int  1 1 1 1 1 1 1 1 1 1 ...
 $ V1                                  : int  27 7 7 26 7 26 6 6 6 7 ...
 $ observ_set                          : Factor w/ 1 level "train": 1 1 1 1 1 1 1 1 1 1 ...
 $ tBodyAcc-mean()-X                   : num  0.262 0.354 0.344 0.292 0.314 ...

1 个答案:

答案 0 :(得分:0)

我会这样做。映射由'test_label'和'id'完成,它们使用merge()合并。如果您想将所有值保留在df中,请使用all.x = T。否则将其删除。

set.seed(1237)
lookup <- data.frame(id = 1:6, activity = LETTERS[1:6])
df <- data.frame(test_label = sample(1:6, 10, replace = T))
merge(df, lookup, by.x = "test_label", by.y ="id", all.x = T)

test_label activity
1           1        A
2           1        A
3           2        B
4           2        B
5           3        C
6           5        E
7           5        E
8           6        F
9           6        F
10          6        F