заполнение переменных элементов на основе значения другого значения элемента переменной в r - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть датафрейм с некоторыми пропущенными значениями.Я хочу заполнить эти пропущенные значения на основе значения другой переменной в моем фрейме данных, но не могу обработать код.

 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

Iхотел бы заполнить регион "mac", если region = 1 или 2, и альтернативно заполнить регион "sto", если region = 3. Я попробовал следующий код:

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

Как вы можете видеть, оно заполняет «mac» за 1 или 2 переменными элементами для фермы.Любой совет будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Вы можете использовать ifelse для создания дополнительного столбца

df$region <- ifelse(df$farm == 1 | df$farm == 2,'mac',ifelse(df$farm == 3, 'sto',NA))
0 голосов
/ 28 ноября 2018

Использование 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))
0 голосов
/ 28 ноября 2018

Использование базы 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')


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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...