簡體   English   中英

如何從R中的較大數據幀中多次子集化

[英]How to subset multiple times from larger data frame in R

我在 .csv 中有以下廣泛的數據:

主題 Show1_judgment1 Show1_judgment2 Show1_judgment3 Show1_judgment4 Show2_judgment1 Show2_judgment2 Show2_judgment3 Show2_judgment4
1 3 2 5 6 3 2 5 7
2 1 3 5 4 3 4 1 6
3 1 2 6 2 3 7 2 6

專欄繼續為一系列 130 個不同的節目進行相同的四個判斷。

我想將此數據更改為長格式,使其看起來像這樣:

主題 節目 判斷1 判斷2 判斷3 判斷4
1 顯示1 2 5 6 1
1 秀2 3 5 4 4
1 秀3 2 6 2 5

通常,我會使用 base r 將列子集到它們自己的數據幀中,然后使用rbind將它們放入一個數據幀中。

但是既然有這么多不同的節目,那樣做會非常低效。 我在 R 方面相對新手,所以我只能做非常基本的 for 循環,但我認為將主題列(數據中的第一列)子集的 for 循環,然后 4 個連續列的組會更有效地執行此操作。

誰能幫我為此創建一個for循環?

預先感謝您的幫助!

不需要for循環,這是從寬格式轉換或“旋轉”到長格式​​。

蒂迪爾

tidyr::pivot_longer(dat, -Subj, names_pattern = "(.*)_(.*)", names_to = c("show", ".value"))
# # A tibble: 6 x 6
#    Subj show  judgment1 judgment2 judgment3 judgment4
#   <int> <chr>     <int>     <int>     <int>     <int>
# 1     1 Show1         3         2         5         6
# 2     1 Show2         3         2         5         7
# 3     2 Show1         1         3         5         4
# 4     2 Show2         3         4         1         6
# 5     3 Show1         1         2         6         2
# 6     3 Show2         3         7         2         6

數據表

需要data.table-1.14.3 ,相對較新(或來自 github)。

data.table::melt(
  dat, id.vars = "Subj",
  measure.vars = measure(show, value.name, sep = "_"))

暫無
暫無

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

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