我有一个缺少某些值的数据框。我想根据数据框中另一个变量的值来填充这些缺失的值,但无法计算代码。
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”。任何建议将不胜感激。
答案 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))