我正在尝试根据另外两列(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
答案 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))