R根据另外两列中的值在新列中打印值

时间:2016-01-31 23:54:44

标签: r dplyr

我正在尝试根据另外两列(file_name和Morph)中的值创建一个列(H2f_back)。当每个file_name的Morph = B被粘贴到H2f_back时,我想要H2f_MEAN的值。

对于给定的数据表(“数据”),这会产生类似的结果:

file_name,  H2f_MEAN,   Morph,  H2f_back  
6052_1, 0.14,   B,  0.14  
6052_1, 0.22,   C,  0.14  
6052_2, 0.34,   C,  0.41  
6052_2, 0.41,   B,  0.41  
6052_3, 0.53,   M,  0.01
6052_3, 0.01,   B,  0.01

此代码:

df<-read.csv("~/Desktop/IODP/EXP_337/SIMS/test.csv", header=TRUE)
df<-data.frame(df, stringsAsFactors = FALSE)
df %>% group_by(file_name, cumsum(Morph == 'background')) %>% mutate(H2f_back = H2f_MEAN[Morph == 'background']) %>% ungroup() %>% select(-4)

导致此错误:
    错误:大小不一致(%d),期望%d(组大小)或1

2 个答案:

答案 0 :(得分:0)

您可以在给定输入上使用dplyr,如下所示:

输入数据:

df
  file_name H2f_MEAN Morph
1         1        1     B
2         1        2     C
3         1        3     C
4         4        4     B
5         4        5     M

file_name分组,并将Morph等于H2f_MEAN的行的B分配给结果列(注意:您可以按此处所示的多个变量进行分组):

df %>% group_by(file_name) %>% mutate(H2f_back = H2f_MEAN[Morph == 'B'])

导致输出:

df
Source: local data frame [5 x 4]

  file_name H2f_MEAN Morph H2f_back
      (int)    (dbl) (chr)    (dbl)
1         1     0.14     B     0.14
2         1     0.22     C     0.14
3         1     0.34     C     0.14
4         4     0.41     B     0.41
5         4     0.53     M     0.41

答案 1 :(得分:0)

考虑到csv文件中的以下数据,这对我有用

file_name,H2f_MEAN,Morph
6052_1,0.14,B
6052_1,0.22,C
6052_2,0.34,C
6052_2,0.41,B
6052_3,0.53,M
6052_3,0.01,B

用于文件输入而不是基本R函数的读取器。

library(readr)
library(dplyr)
read_csv("~/elizr_error.csv")
df %>% group_by(file_name) %>% mutate(H2f_back = H2f_MEAN[Morph == 'B'])

file_name H2f_MEAN Morph H2f_back
  (chr)    (dbl) (chr)    (dbl)
6052_1     0.14     B     0.14
6052_1     0.22     C     0.14
6052_2     0.34     C     0.41
6052_2     0.41     B     0.41
6052_3     0.53     M     0.01
6052_3     0.01     B     0.01

修改:如果有没有“B”条件的文件,您可以尝试以下操作,如果找不到B,则会将值设置为0.0

df %>% group_by(file_name) %>% mutate(H2f_back = ifelse('B' %in% Morph, H2f_MEAN[Morph == 'B'], 0.0))