簡體   English   中英

使用Apply系列功能重組數據

[英]Restructuring data using apply family of functions

我繼承了一個數據集,該數據集是針對13個名稱中的每個名稱測量的23個屬性(受試者之間-每個參與者在所有這些屬性上僅對一個名稱評分)。 現在,它的結構使得屬性是移動最快的因素,后跟名稱。 因此數據如下所示:

Sub#    N1-item1  N1-item2  N1-item3  […]   N2-item1  N2-item2  N2-item3
1       3         5         3               NA        NA        NA
2       NA        NA        NA              1         5         3
3       3         5         3               NA        NA        NA
4       NA        NA        NA              2         2         1

需要對其進行重組,以使其折疊在名稱上,並且所有item1條目都位於同一列(主題與此無關),如下所示(請記住,有23個項目不是3和13名稱不是2):

Name    item1     item2     item3
N1      3         5         3               
N2      1         5         3  

我可以使用循環來做到這一點,但是我寧願以一種對R更自然的方式來做,我猜這將是應用函數家族之一,但是我無法完全理解它- -什么是聰明的方法?

這是使用dplyrtidyr的答案:

library(dplyr)#loads libraries
library(tidyr)
dat %>% #name of your dataframe
 gather(key, val, -Sub) %>% #gathers to long data, with id as Sub
 filter(!is.na(val)) %>% #removes rows with NA for the value
 separate(key, c("Name", "item")) %>% #split the column key into Name and item
 spread(item, val) #spreads the data into wide format, with item as the columns

  Sub Name item1 item2 item3
1   1   N1     3     5     3
2   2   N2     1     5     3
3   3   N1     3     5     3
4   4   N2     2     2     1

將列名旋轉為itemX-NY ,然后reshape itemX-NY以將itemX-NY排序:

names(dat)[-1] <- gsub("(^.+?)-(.+?$)", "\\2-\\1", names(dat)[-1])
na.omit(reshape(dat, direction="long", idvar="Sub", varying=-1, sep="-"))

#     Sub time item1 item2 item3
#1.N1   1   N1     3     5     3
#3.N1   3   N1     3     5     3
#2.N2   2   N2     1     5     3
#4.N2   4   N2     2     2     1

數據在哪里:

dat <- structure(list(Sub = 1:4, `item1-N1` = c(3L, NA, 3L, NA), `item2-N1` = c(5L, 
NA, 5L, NA), `item3-N1` = c(3L, NA, 3L, NA), `item1-N2` = c(NA, 
1L, NA, 2L), `item2-N2` = c(NA, 5L, NA, 2L), `item3-N2` = c(NA, 
3L, NA, 1L)), .Names = c("Sub", "item1-N1", "item2-N1", "item3-N1", 
"item1-N2", "item2-N2", "item3-N2"), row.names = c(NA, -4L), class = "data.frame

暫無
暫無

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

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