Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用引用表将行插入R中的数据帧?_R_Merge_Dataframe_Categorization - Fatal编程技术网

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

如何使用引用表将行插入R中的数据帧?,r,merge,dataframe,categorization,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_labe

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

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”的新列,并且该列的每个观察值都将对应于引用表中引用编号的等效字符串

例如,如果测试标签第1行等于5,则活动标签第1行等于“站立”

非常感谢你的帮助

# 使用合并方法后:

> 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的结构
我会做如下的事情。映射由“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
set.seed(1237)

查找一种方法是使用
ifelse

如果数据框=测试,活动编号列=activitynum

test$activitylabel <- ifelse(test$activitynum == 1, "walking, ifelse(test$activitynum == 2, "walking_upstairs", ifelse(test$activitynum == 3, "walking_downstairs", ifelse(test$activitynum == 4, "sitting", ifelse(test$activitynum == 5, "standing", ifelse(test$activitynum == 6, "laying", NA))))))

您的测试表中是否已经有针对每个测试主题的活动编号(1、2、3、4、5和6),并且您只想用活动编号的字符串创建一个附加列?hi@vagabond,是的,这是正确的。测试df有一列活动编号(但没有标签),我只想插入一列“字符串”,其值与测试df中的“id”键相关。我复制了样本数据集、查找表和合并-没有得到任何错误-请参见我答案中的示例。我认为警告与变量的
类有关。粘贴
str(test)
str(lookup\u table)
的输出。是的,看起来附加函数工作正常,它可能对它必须处理的所有变量都很恼火:)太好了,然后你可以通过单击复选标记并向上投票来接受答案!嗨@vagabond我试过你的方法,但似乎有一个警告。它抛出了一些警告(test2):cat(list(…)、file、sep、fill、labels、append)中的错误:“cat”无法处理参数2(类型“list”)--已经说过我的新标签列在那里。您尝试了哪种方法?
merge
ifelse
?另外,你能粘贴一些样本数据吗?粘贴的输出:
test[1:10,1:5]
-我假设您的activitynum列和id位于前5列中。我使用了merge方法,它将新列[565]追加到数据集的末尾。(输出见主柱)
test$activitylabel <- ifelse(test$activitynum == 1, "walking, ifelse(test$activitynum == 2, "walking_upstairs", ifelse(test$activitynum == 3, "walking_downstairs", ifelse(test$activitynum == 4, "sitting", ifelse(test$activitynum == 5, "standing", ifelse(test$activitynum == 6, "laying", NA))))))
lookup <- data.frame(activitynum = c(1,2,3,4,5,6), activity = c("walking", "walking_upstairs", "walking_downstairs", "standing", "sitting", "laying"))

survey <- data.frame(id = c(seq(1:10)), activitynum = floor(runif(10, 1, 7)), var1 = runif(10, 1, 100))

merge(survey, lookup, by = "activitynum", all.x = TRUE)

> str(lookup)
'data.frame':   6 obs. of  2 variables:
 $ activitynum: num  1 2 3 4 5 6
 $ activity   : Factor w/ 6 levels "laying","sitting",..: 4 6 5 3 2 1
> str(survey)
'data.frame':   10 obs. of  3 variables:
 $ id         : int  1 2 3 4 5 6 7 8 9 10
 $ activitynum: num  1 2 4 1 4 6 2 4 2 2
 $ var1       : num  52.3 60.5 53.3 49.8 73.1 ...