[英]R: Create matrix of values from other table
我有以下由x
及其頻率組成的數據表table5
,它是使用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 {...} etc.
嘗試,都產生了某種形式的警告或錯誤(例如,“要替換的項目數...”和“尺寸...”,並且沒有產生任何令人信服的結果。我已經遍歷了無數其他有關錯誤/警告的問題,無法完全找到我想要的東西-關於矢量化有很多東西,但是我可以我不太明白為什么會是這個問題。有人可以為這個小任務建議一個合適的選擇嗎?
我將按factor(x, levels = 3:5)
進行匯總,而所有不存在的水平都將變為NA
。 然后,您可以根據需要將其更改為"other"
。 在這種情況下, data.table
很方便,因為它可以將NA
sa保留為單獨的組,而不是忽略它們
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
一個base R
選項是基於帶有%in%
的'x'列的值創建一個邏輯索引。 我們拿到的sum
基於“I1”和的否定指數“頻率”的rbind
與“表5”的子行。
i1 <- table5$x %in% 3:5
`row.names<-`(rbind(table5[i1,], list(x= "Other",
freq=sum(table5[!i1,"freq"]))), NULL)
# x freq
#1 3 21
#2 4 21
#3 5 1345
#4 Other 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.