📜  r 中的收集函数 (1)

📅  最后修改于: 2023-12-03 15:04:45.443000             🧑  作者: Mango

R的收集函数

在R中,使用收集函数可以将复杂的数据结构收集到一个更容易管理的格式中。在本文中,我们将介绍R中最常用的收集函数。

gather()

gather()函数允许用户将数据从宽格式转换为长格式。以下是一个例子,它将宽格式的数据框转换为长格式:

library(tidyr)
df <- data.frame(x = c("A", "B"), y = c(1, 2), z = c(3,4))
gather(df, key = "key", value = "value", -x)

这里我们使用了tidyr库中的gather()函数,将df数据框中除了x列之外的所有列转换为长格式,并将它们存储在keyvalue列中。

pivot_longer()

pivot_longer()函数也允许将数据从宽格式转换为长格式。它比gather()函数更加灵活,可以一次性转换多列。以下是一个例子:

library(tidyr)
df <- data.frame(
  id = c(1, 2),
  q1 = c("yes", "no"),
  q2 = c("maybe", "yes"),
  q3 = c("no", "no")
)
pivot_longer(df, cols = c(q1, q2, q3), names_to = "question", values_to = "answer")

在这个例子中,我们使用pivot_longer()函数将df数据框中的q1,q2q3列转换为长格式,并将它们存储在questionanswer列中。

spread()

gather()函数和pivot_longer()函数相反,spread()函数允许您将数据从长格式转换为宽格式。以下是一个例子:

library(tidyr)
df <- data.frame(
  id = c(1, 1, 2, 2),
  question = c("q1", "q2", "q1", "q2"),
  answer = c("yes", "no", "no", "maybe")
)
spread(df, key = question, value = answer)

在这个例子中,我们可以看到如何使用spread()函数将df数据框转换为宽格式,其中question列变成了q1q2两列。

separate()

在收集函数中,separate()函数是一个有用的工具,它可以将一个包含多个值的单元格拆分成多个列。以下是一个例子:

library(tidyr)
df <- data.frame(
  name = c("John, Smith", "Jane, Doe"),
  age = c(35, 28)
)
separate(df, col = name, into = c("first", "last"), sep = ", ")

在这个例子中,我们使用separate()函数将name列分解成firstlast两列。

总结

收集函数是R中的强大工具,可以将数据从宽格式转换为长格式,或从长格式转换为宽格式,并将复杂的数据结构转换为更容易管理的格式。以上介绍的函数是R中最常用的收集函数。