gpt4 book ai didi

r - 使用 `dplyr` 改变 `rowSums` 中的列

转载 作者:行者123 更新时间:2023-12-03 14:46:05 24 4
gpt4 key购买 nike

最近我偶然发现了 dplyr 的奇怪行为如果有人能提供一些见解,我会很高兴。

假设我有一个数据,其中 com 列包含一些数值。在一个简单的场景中,我想计算 rowSums .虽然有很多方法可以做到,但这里有两个例子:

df <- data.frame(matrix(rnorm(20), 10, 2),
ids = paste("i", 1:20, sep = ""),
stringsAsFactors = FALSE)

# works
dplyr::select(df, - ids) %>% {rowSums(.)}

# does not work
# Error: invalid argument to unary operator
df %>%
dplyr::mutate(blubb = dplyr::select(df, - ids) %>% {rowSums(.)})

# does not work
# Error: invalid argument to unary operator
df %>%
dplyr::mutate(blubb = dplyr::select(., - ids) %>% {rowSums(.)})

# workaround:
tmp <- dplyr::select(df, - ids) %>% {rowSums(.)}
df %>%
dplyr::mutate(blubb = tmp)

# works
rowSums(dplyr::select(df, - ids))

# does not work
# Error: invalid argument to unary operator
df %>%
dplyr::mutate(blubb = rowSums(dplyr::select(df, - ids)))

# workaround
tmp <- rowSums(dplyr::select(df, - ids))
df %>%
dplyr::mutate(blubb = tmp)

首先,我真的不明白是什么导致了错误,其次我想知道如何以整洁的方式实际实现一些(可行的)列的整洁计算。

编辑

问题 mutate and rowSums exclude columns ,虽然相关,但侧重于使用 rowSums用于计算。在这里,我很想知道为什么上面的例子不起作用。与其说是如何解决(请参阅变通方法),不如说是了解应用天真的方法时会发生什么。

最佳答案

这些示例不起作用,因为您正在嵌套 selectmutate并使用裸变量名。在这种情况下,select正在尝试做类似的事情

> -df$ids
Error in -df$ids : invalid argument to unary operator

失败是因为您无法否定字符串(即 -"i1"-"i2" 没有意义)。以下任一配方均有效:
df %>% mutate(blubb = rowSums(select_(., "X1", "X2")))
df %>% mutate(blubb = rowSums(select(., -3)))

或者
df %>% mutate(blubb = rowSums(select_(., "-ids")))

正如@Haboryme 所建议的那样。

关于r - 使用 `dplyr` 改变 `rowSums` 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com