![](/img/trans.png)
[英]Condensing code: Check that multiple columns follow a boolean in data frame in R
[英]Condensing Data Frame in R
我只是有一個簡單的問題,非常感謝大家的意見,你們對我的項目幫助很大。 我還有一個關於 R 中的數據幀的問題。
我有看起來類似於這樣的數據框:
C <- c("","","","","","","","A","B","D","A","B","D","A","B","D")
D <- c(NA,NA,NA,2,NA,NA,1,1,4,2,2,5,2,1,4,2)
G <- list(C=C,D=D)
T <- as.data.frame(G)
T
C D
1 NA
2 NA
3 NA
4 2
5 NA
6 NA
7 1
8 A 1
9 B 4
10 D 2
11 A 2
12 B 5
13 D 2
14 A 1
15 B 4
16 D 2
我希望能夠將所有重復字符壓縮成一個,並且看起來類似於:
J B C E
1 2 1
2 A 1 2 1
3 B 4 5 4
4 D 2 2 2
所以當然,數據都是一樣的,只是它被壓縮並形成了新的列來保存數據。 我相信有一個簡單的方法可以做到這一點,但從我看過的書中,我沒有看到任何關於這個的東西!
編輯我編輯了這個例子,因為到目前為止它沒有與答案一起工作。 我想知道空白中的 NA、空白和不均勻是否有影響?
這似乎得到了你正在尋找的結果。 我假設可以刪除NA
值,因為它與您顯示的所需 output 匹配。
T <- na.omit(T)
T$ind <- ave(1:nrow(T), T$C, FUN = seq_along)
reshape(T, direction = "wide", idvar = "C", timevar = "ind")
# C D.1 D.2 D.3
# 4 2 1 NA
# 8 A 1 2 1
# 9 B 4 5 4
# 10 D 2 2 2
library(reshape2)
dcast(T, C ~ ind, value.var = "D", fill = "")
# C 1 2 3
# 1 2 1
# 2 A 1 2 1
# 3 B 4 5 4
# 4 D 2 2 2
這是重塑解決方案:
require(reshape)
cast(T, C ~ ., function(x) x)
將 T 更改為 df 以避免壞習慣。 返回一個列表,這不是您想要的,但您可以從那里轉換。
C <- c("A","B","D","A","B","D","A","B","D")
D <- c(1,4,2,2,5,2,1,4,2)
my.df <- data.frame(id=C,val=D)
ret <- function(x) x
by.df <- by(my.df$val,INDICES=my.df$id,ret)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.