1.一个示例

在 dplyr 中,pivot_longer 函数用于将数据从宽格式变为长格式。以下是一个简单的例子,演示如何使用 pivot_longer:

假设你有一个数据框(data frame)如下:

 

 

 

上述数据框中,Math_Score_Week1 和 Math_Score_Week2 是两个不同周的数学成绩,English_Score_Week1 和 English_Score_Week2 是两个不同周的英语成绩。你希望将这些数据从宽格式转换为长格式。

使用 pivot_longer 可以实现这一目标:

这里,pivot_longer 的参数包括:

cols:指定要进行长格式转换的列。 names_to:用于指定新列的名称。在这个例子中,我们使用 .value 来表示数学和英语成绩的部分,同时指定了一个额外的 Week 列。 names_sep:指定用于分割列名的字符,在这里是下划线 "_”。 这样,原始数据的宽格式就被转换成了长格式,每个学生每周的数学和英语成绩都被整理到了新的行中。

 

2.option的解释

  1. names_prefix

    • 描述: names_prefix 是一个正则表达式,用于从每个变量名称的开头删除匹配的文本。

    • 用法: 如果你的变量名称有一个共同的前缀,而你希望在转换过程中去掉这个前缀,可以使用 names_prefix

  2. names_pattern

    • 描述: names_pattern 是一个正则表达式,用于从变量名称中提取匹配组。

    • 用法:names_to 包含多个值时,names_pattern 可以帮助你指定如何从变量名称中提取信息,以创建新的列。例如,在你的数据中,如果有一列变量名是类似 "new_diagnosis_m014" 的话,你可以使用 names_pattern = "new_?(.*)_(.)(.*)"来提取诊断、性别和年龄信息。

  3. names_ptypesvalues_ptypes

    • 描述: 这两个参数分别是列名和值的原型(prototype),它们用于指定新创建的列和值的预期类型。

    • 用法: 如果你想确认新创建的列的类型是否符合预期,可以使用这两个参数。例如,如果你期望新的列是整数类型,可以使用 names_ptypes = list(week = integer())

  4. names_transformvalues_transform

    • 描述: 这两个参数是列名和值的转换函数,用于在创建新列和值时进行类型转换。

    • 用法: 如果你需要对特定列进行类型转换,可以使用这两个参数。例如,如果你想将某个字符变量转换为整数,可以使用 names_transform = list(week = as.integer)

  5. names_repair

    • 描述: names_repair 定义了输出具有无效列名时的行为。

    • 用法: 默认值是 "check_unique",如果输出的列名重复,会报错。可以设置为 "minimal" 允许输出中有重复列,或者设置为 "unique" 通过添加数字后缀来去重。

  6. names_to

    • 描述: names_to 是一个字符向量,用于指定从列名中提取信息创建的新列的名称。

    • 用法: 具体用法取决于 names_to 的长度。如果长度为 1,将创建一个包含指定列名的新列。如果长度大于 1,则需要使用 names_sepnames_pattern 指定如何拆分列名。

3.names_prefix:实例

假设你有以下数据框,其中的列名以 "X_" 开头,而你想要在转换时去掉这个前缀:

使用 pivot_longer 函数,并结合 names_prefix 参数,可以进行如下转换:

这样,names_prefix = "X" 就会在转换过程中去掉列名的 "X" 前缀,得到如下的结果:

4.names_pattern:实例

假设你有以下数据框,其中的列名包含有关个体诊断、性别和年龄的信息,而你想要在转换时提取这些信息:

使用 pivot_longer 函数,并结合 names_pattern 参数,可以进行如下转换:

这样,names_pattern = "new?(.*)(.)(.*)" 就会在转换过程中提取诊断、性别和年龄信息,得到如下的结果: