我想在R中使用变量名来与id-Variable中的String-Data进行比较。
表1显示了我的样本表当前的外观,表2显示了我想要实现的目标。在表2中,如果变量id与列名匹配,则将相应的值复制到新变量“newid”中。其他值也会复制到新变量中以便于计算
id a b c newid
c 1 2 3
a 4 2 1
b 5 8 9
id a b c newid rest1 rest2
c 1 2 3 3 1 2
a 4 2 1 4 2 1
b 5 8 9 8 5 9
提前谢谢
答案 0 :(得分:2)
通过tidyverse
,
library(tidyverse)
df %>%
gather(var, val, -id) %>%
filter(id == var) %>%
left_join(df, ., by = 'id') %>%
select(-var)
给出,
id a b c val 1 c 1 2 3 3 2 a 4 2 1 4 3 b 5 8 9 8
答案 1 :(得分:1)
使用match
并使用索引矩阵进行子集化:
DF <- read.table(text = "id a b c
c 1 2 3
a 4 2 1
b 5 8 9 ", header = TRUE)
DF$newid <- DF[, -1][cbind(seq_len(nrow(DF)),
match(DF$id, colnames(DF)[-1]))]
# id a b c newid
#1 c 1 2 3 3
#2 a 4 2 1 4
#3 b 5 8 9 8
答案 2 :(得分:0)
使用reshape中的melt
temp=with(melt(dt,'id'),melt(dt,'id')[id==variable,])
dt$New=temp$value[match(dt$id,temp$variable)]
dt
id a b c New
1 c 1 2 3 3
2 a 4 2 1 4
3 b 5 8 9 8