根据r

时间:2018-11-28 02:16:22

标签: r

我有一个缺少某些值的数据框。我想根据数据框中另一个变量的值来填充这些缺失的值,但无法计算代码。

 library(tidyr)
farm<-  c(1,    1,  2,  3,  3,  3,  4)
region<-    c(NA,   NA, NA, NA, NA, NA, 'Woods')
test<-  c('x',  'y',    'x',    'x',    'y',    'y',     
'x')
i=1:2
j=3
df = data.frame(farm, region, test)
df

这是结果

  farm region test
1    1   <NA>    x
2    1   <NA>    y
3    2   <NA>    x
4    3   <NA>    x
5    3   <NA>    y
6    3   <NA>    y
7    4  Woods    x

如果region = 1或2,我想用“ mac”填充区域,如果region = 3,我想用“ sto”填充区域。我尝试了以下代码:

df <- transform(df,region=if (df$farm==i) "mac" else NA)

df 开始,但正在得到:

farm
<dbl>
region
<chr>
test
<fctr>
1   mac x       
1   mac y       
2   mac x       
3   mac x       
3   mac y       
3   mac y       
4   mac x

如您所见,它在服务器场的1或2个变量元素之外填充了“ mac”。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:0)

使用基数

library(tidyr)
farm<-  c(1,    1,  2,  3,  3,  3,  4)
region<-    c(NA,   NA, NA, NA, NA, NA, 'Woods')
test<-  c('x',  'y',    'x',    'x',    'y',    'y',     
          'x')


df = data.frame(farm, region, test)


df$region <- ifelse(df$farm == 1|df$farm ==2,"mac",
                    ifelse(df$farm == 3, "sto", as.character(df$region)))

df

答案 1 :(得分:0)

您可以使用ifelse创建额外的列

df$region <- ifelse(df$farm == 1 | df$farm == 2,'mac',ifelse(df$farm == 3, 'sto',NA))

答案 2 :(得分:0)

使用case_when()中的dplyr

library(dplyr)

df$region <- case_when(df$farm==1 | df$farm==2 ~ "mac",
                       df$farm==3 ~ "sto",
                       TRUE ~ as.character(df$region))