0
我對多個應答者進行了多波調查,數據由userid
標識。有數百個問題,data.table
中的列。 Wave和userid
是data.table
的行。我想將每個userid
的波浪摺疊或拼成一行。如果問題以多個波形/行使用,我想保留最近波形的迴應。例如,如果一個問題在第6行和第7行中對特定的userid
有響應,我希望該相應的userid
的彙總行具有來自第7行的響應。如果相應的userid
的列最終具有全部NA,在最終輸出中獲得NA是沒有問題的。R:使用多個波形/重複行調查摺疊數據框
library(data.table)
library(dplyr)
樣本數據:
> dput(testc)
structure(list(userid = c("QW3208", "QW3208", "QW3208", "QW3208",
"QW3208", "QW3208", "QW3208", "QW3208", "QW3208", "QW3208", "QW3208",
"QW3208", "QW3227", "QW3227", "QW3227", "QW3227", "QW3227", "QW3227",
"QW3227", "QW3227", "QW3227", "QW3227", "QW3227", "QW3227"),
wave_id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L), .Label = c("Wave 1 ", "Wave 2 ", "Wave 3 ", "Wave 4 ",
"Wave 5 ", "Wave 6 ", "Wave 7 ", "Wave 8 ", "Wave 9 ", "Wave 10 ",
"Wave 11 ", "Wave 12 "), class = "factor"), blnc = c(1L,
2L, NA, NA, 3L, NA, NA, NA, 4L, NA, NA, NA, 1L, 2L, NA, NA,
2L, NA, NA, NA, 1L, NA, NA, NA), lines = c(NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, "2", NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, "2", NA), know = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1L)), .Names = c("userid", "wave_id", "blnc", "lines",
"know"), class = c("data.table", "data.frame"), row.names = c(NA,
-24L), .internal.selfref = <pointer: 0x0000000000350788>)
預期輸出:
userid wave_id blnc lines know
1: QW3208 Wave 12 4 2 1
2: QW3227 Wave 12 1 2 1
如果我使用下文中,它的工作原理的一列在時間:
> testc[!is.na(testc$blnc)] %>% group_by(userid) %>% arrange(desc(wave_id)) %>% slice(1)
Source: local data table [2 x 5]
Groups: userid
userid wave_id blnc lines know
(chr) (fctr) (int) (int) (int)
1 QW3208 Wave 9 4 NA NA
2 QW3227 Wave 9 1 NA NA
我可以得到我想要的第一家公司的結果這裏有數據。我不知道如何在每個userid
的所有列上重複示例代碼,並將它們都作爲data.table返回,而不需要太多清理。大多數列的值都是整數,但有些是因素或字符。
工作。謝謝。在我發佈在這裏的示例數據中,我將'userid'從一個因子中更改爲字符變量,並且您的代碼不會與'userid'一起運行,作爲我在計算機上進行測試的更大示例的一個因子。照顧這一點,它哼了一聲。我試圖理解你的代碼,我不得不承認,我不能。我以爲'lapply()'不得不從列表開始,你使用的第一個似乎不是。而你從看似稀薄的空氣給我創造'each_column'。我不是在敲你,你幫助了我,我只是想明白。 – shea
'lapply'很奇怪,別擔心。按照我們的方式對數據框架(data.table,在這種情況下)使用'split',創建一個按id分組的data.frames列表。我們可以在管道中寫入'lapply(。,a_function)',但我使用了縮寫形式。如果你在這樣的列表中使用'lapply',那麼你應用的函數將把每個數據幀作爲它的參數。這就是爲什麼我們需要嵌套一個'lapply',所以我們把每個data.frame的'每一列'作爲我們正在應用的函數的參數。 –