簡體   English   中英

從數據框中提取數據

[英]Extracting data from data frame

我有一個看起來像這樣的數據框:

    Code           ID          X1         X2
1  1000             2         1.6       250.6
2  1000             3         0.15      340.9
3  1001             2         0.53      441.7
4  1001             3         1.8       499.0
5  1002             2         4.4       516.6
6  1003             3         4.9       616.6

我想做的是創建一個具有唯一代碼且每個唯一ID作為一列(有兩個唯一ID:2和3)的X數據幀,並帶有相應的X1和X2值,因此結果應如下所示:

    Code           ID2X1       ID2X2      ID3X1       ID3X2
1  1000             1.6        250.6        0.15      340.9
2  1001            0.53        441.7         1.8      499.0
5  1002             4.4        516.6          NA         NA
6  1003             NA            NA         4.9      616.6

我使用“唯一”函數來提取唯一代碼,因此我擁有第一列,但沒有想到提取數據的有效方法。 請注意,某些代碼沒有ID2或ID3的值。

使用dplyrtidyr

 library(dplyr)
 library(tidyr)
  mydf%>% 
  gather(Var, Val, X1:X2) %>%
  mutate(IDVar=paste0("ID", ID, Var)) %>%
  select(-ID, -Var) %>% 
  spread(IDVar, Val)
  #  Code ID2X1 ID2X2 ID3X1 ID3X2
 #1 1000  1.60 250.6  0.15 340.9
 #2 1001  0.53 441.7  1.80 499.0
 #3 1002  4.40 516.6    NA    NA
 #4 1003    NA    NA  4.90 616.6

這是一個基本的reshape問題,從“長”重塑為“寬”。

嘗試以下操作(假設您的data.frame稱為“ mydf”):

reshape(mydf, idvar="Code", timevar="ID", direction = "wide")
#   Code X1.2  X2.2 X1.3  X2.3
# 1 1000 1.60 250.6 0.15 340.9
# 3 1001 0.53 441.7 1.80 499.0
# 5 1002 4.40 516.6   NA    NA
# 6 1003   NA    NA 4.90 616.6

這是使用reshape2包的另一個選項:

dat = read.table(text=" Code ID X1 X2 
           1 1000 2 1.6 250.6 
           2 1000 3 0.15 340.9 
           3 1001 2 0.53 441.7 
           4 1001 3 1.8 499.0 
           5 1002 2 4.4 516.6 
           6 1003 3 4.9 616.6",header=TRUE)

library(reshape2)

# Melt to long format. 
dat.m = melt(dat, id.var=c("Code","ID"))

# Combine "ID" and "variable" into a single column
dat.m$IDvar = paste0("ID", dat.m$ID, dat.m$variable)

# Remove uneeded columns
dat.m = dat.m[ , c("Code","IDvar", "value")]

# Cast to wide format
dat.w = dcast(dat.m, Code ~ IDvar, value.var="value")

dat.w

Code ID2X1 ID2X2 ID3X1 ID3X2
1 1000  1.60 250.6  0.15 340.9
2 1001  0.53 441.7  1.80 499.0
3 1002  4.40 516.6    NA    NA
4 1003    NA    NA  4.90 616.6

暫無
暫無

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

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