[英]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.