如何将行的子集移动到 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