如果另一个值为空,则替换datafrme中的值
我有一个数据帧:如果另一个值为空,则替换datafrme中的值,r,dataframe,R,Dataframe,我有一个数据帧: 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', '') ) 如果类型为空,我想将子组值替换为
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"
}
但它不起作用。我该怎么做呢?使用base
R
您只需选择符合您的条件的值(type为空的行中的子组值),然后替换它们:
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
您可以尝试以下代码:
- 使用
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
x <- within(x,subgroup <- ifelse(type=="","A",subgroup))
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