循环遍历R数据帧中的列

时间:2019-01-21 13:44:11

标签: r

我想遍历数据框中的特定列并创建新列

我有一个看起来像这样的数据框:

  a   b  c d
2.8   A  A T    
1.9   T  G T 
1.7   G  G A 
2.3   T  T G

我想要这样的输出:

a    b  c   c_1   d d_1
2.8  A  A   2.8   T  0 
1.9. T  G   0     T  1.9 
1.7  G  G   1.7   A  0
2.3  T  T   2.3   G  0
1.2  C  G   0     C  1.2

基本上,如果c或d中的字母与b中的字母相同,则创建一个新列c_1d_1,其值等于a,如果字母不同则等于0。

我只能对一列进行操作:

df$c_1 <-ifelse(df$c==df$b,df$a,0)

但是我有很多列(大约100列),如何为所有列做到这一点?

1 个答案:

答案 0 :(得分:3)

使用dplyr(dd是数据框的名称):

bind_cols(dd,transmute_at(dd, 3:4, ~ifelse(.==dd$b, dd$a,0)))

Transmute创建仅包含新列的数据框。在3:4中,我选择要更改的列-在这种情况下,只需给出其索引向量即可。最后,bind_cols是cbind的dplyr变体,它将重命名新列以避免重复。

结果:

    a b c d  c1  d1
1 2.8 A A T 2.8 0.0
2 1.9 T G T 0.0 1.9
3 1.7 G G A 1.7 0.0
4 2.3 T T G 2.3 0.0

如果要按示例中的顺序对列进行排序,可以添加以下内容:

%>% .[,sort(names(.))]

哪个会给你:

    a b c  c1 d  d1
1 2.8 A A 2.8 T 0.0
2 1.9 T G 0.0 T 1.9
3 1.7 G G 1.7 A 0.0
4 2.3 T T 2.3 G 0.0