我有以下数据框 table5
,由 x
及其频率组成,使用 counts
从其他数据生成:
x freq
1 1 3
2 3 21
3 4 21
4 5 1345
5 7 1
我想以一般方式(即与原始数据帧中的其他值一起使用)将其传输到以下数据帧table5if
:
Frequency
3 21
4 21
5 1345
other 4
即其中数字 3、4 和 5 的频率直接传输,所有其他数字在 other
中相加。我最近的尝试是这样的:
k <- seq(1, nrow(table5), by=1)
ifelse(table5$x[k] == 3, table5if[1] <- table5$freq[k],
ifelse(table5$x[k] == 4, table5if[2] <- table5$freq[k],
ifelse(table5$x[k] == 5, table5if[3] <- table5$freq[k], table5if[4] <- (table5if[4] + table5$freq[k])
)
)
)
此尝试以及使用 if(...){...} else {...} 等的其他尝试
都产生了某种形式的警告或错误(例如“number要替换的项目...”和“维度数...”,并且没有产生任何令人信服的结果。我已经查看了无数其他问题的错误/警告,但无法完全找到我正在寻找的内容for - 有很多关于矢量化的内容,但我不太明白为什么这会成为问题。任何人都可以为这个小任务建议一个合适的选择吗?
最佳答案
我将按factor(x,levels = 3:5)
进行聚合,而所有不存在的级别将变为NA
。如果您愿意,您可以随后将其更改为“other”
。 data.table
在这种情况下很方便,因为它将 NA
保留为一个单独的组,而不是忽略它们
library(data.table)
setDT(df)[, .(Frequency = sum(freq)), by = factor(x, levels = 3:5)]
# factor Frequency
# 1: NA 4
# 2: 3 21
# 3: 4 21
# 4: 5 1345
关于R:从其他表创建值矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36463665/