将变量名与String进行比较以计算新变量

时间:2017-11-02 14:08:43

标签: r

我想在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

提前谢谢

3 个答案:

答案 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