簡體   English   中英

如何在R中的兩列之間折疊/合並所選因子水平

[英]How to collapse/join selected factor levels across two columns in R

假設我有以下數據框:

x <-c(rep (c ("s1", "s2", "s3"),each=5 ))
y <- c(rep(c("a", "b", "c", "d", "e"), 3) )               
z<-c(1:15)    

x_name <- "dimensions"
y_name <- "aspects"
z_name<-"value"
df <- data.frame(x,y,z)
names(df) <- c(x_name,y_name, z_name)

如何折疊/合並因子級別“ a”,“ c”,“ d”到“維度”和“值”中的一個新因子“ x”,以便將值累加到新的x因子級別。 輸出應如下所示:

在此處輸入圖片說明

我想用gsub用x替換a,c,d的名稱,然后使用聚合求和。 但是,有沒有更簡單的方法可以做到這一點? 此外,如果我還有其他包含a,c,d的列,我不確定我的解決方案是否還會很好。
我在論壇上查看了幾個相關的答案,但都沒有解決這種情況。 謝謝。

首先將a,c和d重命名為x,然后按維度和方面求和

讀取數據:

df <- data.frame(dimensions = x, aspects = y, value = z, stringsAsFactors = FALSE)

Base R解決方案:

# if you read the data my way the following line is unnecessary
# df$aspects <- as.character(df$aspects) 
df[df$aspects %in% c("a","c","d"),]$aspects <- "x"
aggregate(value ~., df, sum)

結果:

  dimensions aspects value
1         s1       b     2
2         s2       b     7
3         s3       b    12
4         s1       e     5
5         s2       e    10
6         s3       e    15
7         s1       x     8
8         s2       x    23
9         s3       x    38

data.table解決方案

require(data.table)
DT <- setDT(df)
DT[aspects %in% c("a","c","d"), aspects := "x"]
DT[,sum(value), by=.(dimensions, aspects)]

結果是

   dimensions aspects V1
1:         s1       x  8
2:         s1       b  2
3:         s1       e  5
4:         s2       x 23
5:         s2       b  7
6:         s2       e 10
7:         s3       x 38
8:         s3       b 12
9:         s3       e 15

這是一個使用plyr::revalue的解決方案(另請參見plyr::mapvalues )和dplyr

# install.packages("plyr")
library(dplyr)

df %>%
  mutate(aspects = plyr::revalue(aspects, c("a" = "x", "c" = "x", "d" = "x"))) %>%
  group_by(dimensions, aspects) %>%
  summarise(sum_value = sum(value))

#   dimensions aspects sum_value
#       (fctr)  (fctr)     (int)
# 1         s1       x         8
# 2         s1       b         2
# 3         s1       e         5
# 4         s2       x        23
# 5         s2       b         7
# 6         s2       e        10
# 7         s3       x        38
# 8         s3       b        12
# 9         s3       e        15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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