mutate_at 只有满足特定条件的变量
mutate_at only vars which satisfy a certain condition
我有以下数据框:
db <- structure(list(x = c(0, 1, 2, 4, 0, 3, 5, 8), y = c(0, 0, 3,
4, 8, 9, 1, 5), z = c(3, 2, 0, 1, 4, 6, 9, 8)), row.names = c(NA,
-8L), class = c("tbl_df", "tbl", "data.frame"))
我想用所有其他列的平均值创建一个列 大于 0(每次不同的一组。
我试过以下方法:
db %>% mutate_at(vars(.)>0, rowMeans(.))
我做错了什么?
最后一列的输出应该是 3、1.5、2.5 等等
我找不到 dplyr
的任何好的选择,除了使用这个技巧将所有负值或零值替换为 NA,它们被排除在均值计算之外:
db %>%
mutate_all(~ifelse(.>0,.,NA_integer_)) %>%
mutate(
positivemean = rowMeans(., na.rm=TRUE)
)
请注意,此技巧具有破坏性,因为您会丢失这些值的值。
虽然没有 dplyr
,但您可以在行上使用 apply
循环来获得预期的输出:
db$positivemean = db %>% select(x,y,z) %>% apply(1, function(line){
mean(line[line>0])
})
我有以下数据框:
db <- structure(list(x = c(0, 1, 2, 4, 0, 3, 5, 8), y = c(0, 0, 3,
4, 8, 9, 1, 5), z = c(3, 2, 0, 1, 4, 6, 9, 8)), row.names = c(NA,
-8L), class = c("tbl_df", "tbl", "data.frame"))
我想用所有其他列的平均值创建一个列 大于 0(每次不同的一组。
我试过以下方法:
db %>% mutate_at(vars(.)>0, rowMeans(.))
我做错了什么?
最后一列的输出应该是 3、1.5、2.5 等等
我找不到 dplyr
的任何好的选择,除了使用这个技巧将所有负值或零值替换为 NA,它们被排除在均值计算之外:
db %>%
mutate_all(~ifelse(.>0,.,NA_integer_)) %>%
mutate(
positivemean = rowMeans(., na.rm=TRUE)
)
请注意,此技巧具有破坏性,因为您会丢失这些值的值。
虽然没有 dplyr
,但您可以在行上使用 apply
循环来获得预期的输出:
db$positivemean = db %>% select(x,y,z) %>% apply(1, function(line){
mean(line[line>0])
})