Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果另一个值为空,则替换datafrme中的值_R_Dataframe - Fatal编程技术网

如果另一个值为空,则替换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