如何将行的子集移动到 R 中的新行?
How can I move subsets of rows to new rows in R?
我创建了一项调查,向受访者询问有关其他一些人的问题。生成的数据集具有以下变量:
受访者 ID
您了解的人数 (1-4)
人物 1-变量 1
人物 1-变量 2
人物 2-变量 1
人 2-变量 2
等...
如果这个人只有一个人的信息,那么所有 Person 2-3-4-variables 都是 NA。
请正确分析我需要重组数据,以便每一行只有一个人的信息。因此,如果受访者提供了两个人的信息,则这两个人的变量应该换行。结果应该是这样的:
受访者 ID
变量 1
变量 2
等...
我尝试了一些乱七八糟的方法来移动非缺失值。但是我对R的了解太有限,想不出合适的解决方案。
您正在寻找的是将数据从 so-called“宽”格式转换为“长(呃)”格式。有一个方便的函数:pivot_longer()
(有关详细信息,请参阅 here)。
library(tidyr)
X_wide <- data.frame(id = 1:3, P1 = 4:6, P2 = 7:9, P3 = 10:12)
X_long <- pivot_longer(X_wide, cols = P1:P3, names_to = "person", values_to = "score")
X_long <- as.data.frame(X_long)
这是结果:
> X_wide
id P1 P2 P3
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
> X_long
id person score
1 1 P1 4
2 1 P2 7
3 1 P3 10
4 2 P1 5
5 2 P2 8
6 2 P3 11
7 3 P1 6
8 3 P2 9
9 3 P3 12
我创建了一项调查,向受访者询问有关其他一些人的问题。生成的数据集具有以下变量:
受访者 ID
您了解的人数 (1-4)
人物 1-变量 1
人物 1-变量 2
人物 2-变量 1
人 2-变量 2
等...
如果这个人只有一个人的信息,那么所有 Person 2-3-4-variables 都是 NA。
请正确分析我需要重组数据,以便每一行只有一个人的信息。因此,如果受访者提供了两个人的信息,则这两个人的变量应该换行。结果应该是这样的:
受访者 ID
变量 1
变量 2
等...
我尝试了一些乱七八糟的方法来移动非缺失值。但是我对R的了解太有限,想不出合适的解决方案。
您正在寻找的是将数据从 so-called“宽”格式转换为“长(呃)”格式。有一个方便的函数:pivot_longer()
(有关详细信息,请参阅 here)。
library(tidyr)
X_wide <- data.frame(id = 1:3, P1 = 4:6, P2 = 7:9, P3 = 10:12)
X_long <- pivot_longer(X_wide, cols = P1:P3, names_to = "person", values_to = "score")
X_long <- as.data.frame(X_long)
这是结果:
> X_wide
id P1 P2 P3
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
> X_long
id person score
1 1 P1 4
2 1 P2 7
3 1 P3 10
4 2 P1 5
5 2 P2 8
6 2 P3 11
7 3 P1 6
8 3 P2 9
9 3 P3 12