我有一个包含n个变量的数据集(示例中有3个变量,但各不相同),我想找出这些变量之间的相对频率。它们的名称始终相同,前缀后跟数字序列。
have <-
data.frame(
x1 = sample(1:10, 20, replace = TRUE),
x2 = sample(1:10, 20, replace = TRUE),
x3 = sample(1:10, 20, replace = TRUE)
)
want <-
have |>
mutate(
x1_prop = x1 / (x1 + x2 + x3),
x2_prop = x2 / (x1 + x2 + x3),
x3_prop = x3 / (x1 + x2 + x3))
我认为dplyr中的一个解决方案可以使用mutate(across
,但在语法方面有困难...
want <-
have |>
mutate(across(everything()), . / rowSums(.)) # does not work
4条答案
按热度按时间wwodge7n1#
几件事:
~
中使用匿名函数(或者可以使用\(x)
或function
)across
调用中使用pick(everything())
表示您希望获得所有列的总和。如果只使用.
或.x
,则只会得到当前列的和。e0bqpujr2#
例如,尝试
rowSums
zazmityj3#
下面是一个基本的R方法,在数据上使用
prop.table()
。创建于2023-09-20使用reprex v2.0.2
以下是现有数据的基准:
创建于2023-09-20使用reprex v2.0.2
我在其他很多地方也看到过这种情况。在小数据中,整理操作的开销使它们变慢。然而,当数据更大时,整理操作优于其他一些操作。这里是相同的基准,但有20000个obs而不是20个。
创建于2023-09-20使用reprex v2.0.2
fnvucqvd4#