You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中重构Datacamp上格式异常的阿姆斯特丹大学Dataframe?

重构异常格式的数据框

解决步骤

你的数据框存在两个核心问题:一是仅含一个用点连接的长列名,二是所有数据以分号分隔在同一列中。可以通过以下步骤拆分并重构:

  1. 拆分数据列:将分号分隔的字符串拆分为独立列
  2. 提取并拆分列名:从长列名中提取各独立列的名称
  3. 数据类型转换:将字符型数据转为数值型(适配大部分字段的数值属性)

代码实现(Tidyverse 版本)

# 加载必要包
library(dplyr)
library(tidyr)
library(stringr)

# 1. 拆分数据列:处理空值并生成临时列名
data_clean <- data %>%
  separate(
    col = 1, 
    into = paste0("col_", 1:(max(str_count(.[[1]], ";")) + 1)), 
    sep = ";", 
    fill = "right"
  )

# 2. 提取并拆分原始长列名,得到真实列名
original_colname <- colnames(data)[1]
# 使用正则拆分:仅拆分作为列分隔符的点(不拆分列名内部的点,如ST.timing_1)
new_colnames <- str_split(original_colname, "\\.(?=[A-Za-z_])")[[1]]

# 为新数据框设置列名
colnames(data_clean) <- new_colnames

# 3. 将所有列转为数值型
data_clean <- data_clean %>%
  mutate(across(everything(), as.numeric))

代码实现(Base R 版本)

如果你不想加载额外包,可以用基础R实现:

# 1. 拆分数据为列表,再转为矩阵
data_list <- strsplit(data[[1]], ";")
data_matrix <- do.call(rbind, data_list)

# 2. 转为数据框
data_clean <- as.data.frame(data_matrix, stringsAsFactors = FALSE)

# 3. 拆分并设置列名
original_colname <- colnames(data)[1]
new_colnames <- strsplit(original_colname, "\\.(?=[A-Za-z_])")[[1]]
colnames(data_clean) <- new_colnames

# 4. 转换数据类型为数值型
data_clean[] <- lapply(data_clean, as.numeric)

验证结果

重构完成后,你可以再次运行以下代码验证:

# 查看列名
colnames(data_clean)
# 查看前3行数据
head(data_clean, 3)
# 计算Finished列的和
sum(data_clean$Finished, na.rm = TRUE)

内容的提问来源于stack exchange,提问作者Edwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:34:54