簡體   English   中英

R:從其他表創建值矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM