заменить значение в datafrme, если другое значение пусто - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть фрейм данных:

x = data.frame(group = c(1,1,1,2,2,3,3,3,4,4),
               subgroup = c(1.1, 1.2, 1.3, 2.1, 2.2, 3.1, 3.2, 3.3, 4.1, 4.2),
               type = c("good", 'good', 'bad', 'bad', 'good', 'bad', 'bad', 'good', 'good', '')
)

Я хочу заменить значение подгруппы на "A", если тип пуст. Выходные данные превышены:

x = data.frame(group = c(1,1,1,2,2,3,3,3,4,4),
               subgroup = c(1.1, 1.2, 1.3, 2.1, 2.2, 3.1, 3.2, 3.3, 4.1, "A"),
               type = c("good", 'good', 'bad', 'bad', 'good', 'bad', 'bad', 'good', 'good', '')
)

Я пробовал это:

if (x$type = '') {
  x$subgroup = "A"
}

Но это не сработало. Как я мог это сделать?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Используя базу R, вы можете просто выбрать значения, которые соответствуют вашему условию (значение подгруппы в строке, где тип пуст), а затем заменить их:

x$subgroup[x$type == ""] <- "A"
x
#>    group subgroup type
#> 1      1      1.1 good
#> 2      1      1.2 good
#> 3      1      1.3  bad
#> 4      2      2.1  bad
#> 5      2      2.2 good
#> 6      3      3.1  bad
#> 7      3      3.2  bad
#> 8      3      3.3 good
#> 9      4      4.1 good
#> 10     4        A

Альтернативно, вы можете использовать dplyr / Tidyverse и оператор ifelse:

library(dplyr)
x %>% 
  mutate(subgroup = ifelse(test = type == "", yes = "A", no = subgroup))
#>    group subgroup type
#> 1      1      1.1 good
#> 2      1      1.2 good
#> 3      1      1.3  bad
#> 4      2      2.1  bad
#> 5      2      2.2 good
#> 6      3      3.1  bad
#> 7      3      3.2  bad
#> 8      3      3.3 good
#> 9      4      4.1 good
#> 10     4        A
0 голосов
/ 18 февраля 2020

Вы можете попробовать код ниже:

  • , используя ifelse
x <- within(x,subgroup <- ifelse(type=="","A",subgroup))
  • , используя replace
x <- within(x,subgroup <- replace(subgroup,type=="","A"))

или

x <- within(x,subgroup <- replace(subgroup,nchar(as.character(type))==0,"A"))

такой, что

> x
   group subgroup type
1      1      1.1 good
2      1      1.2 good
3      1      1.3  bad
4      2      2.1  bad
5      2      2.2 good
6      3      3.1  bad
7      3      3.2  bad
8      3      3.3 good
9      4      4.1 good
10     4        A     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...