【问题标题】:Clean HTML table with Reshape2使用 Reshape2 清理 HTML 表格
【发布时间】:2015-01-09 02:37:03
【问题描述】:

R 的新用户。甚至无法思考如何提出问题。我为 HTML 表格抓取了一个网页。一般来说,一切都很顺利,除了一张桌子。不是有 7 个单独的表,而是将所有内容折叠到 1 个表中,第一个表的列名和值是两个单独的列,所有其他表都是行。结果是一个类似这样的表格:

df <- data.frame(is_employed = c("Hobbies", "Has Previous Experience"), false = c("squash", "false"))

显然,我需要将第一列中的行(和列名)作为它们自己的列,将第二列中的项目作为它们的值,最好在列名中使用下划线。我试过了:

df <- dcast(df, ~is_employed, value.var = "false")

但收到一条错误消息。然后我想添加另一列,例如:

df2 <- data.frame(number = c(1, 2), is_employed = c("Hobbies", "Has Previous Experience"), false = c("squash", "false"))

然后我尝试了

df3 <- dcast(df2, number ~is_employed, value.var="false")

这将第一列中的值作为它们自己的列,但产生了两行(而不是 1 行),带有 NA。我确定这是非常基本的,但我无法弄清楚。

编辑时: 我认为这给了我想要的东西,但我不在电脑旁,所以我无法确认:

library("dplyr")
library("tidyr")

mat <- as.matrix(df)
mat <- rbind(colnames(mat), mat)
colnames(mat) <- c("variable", "value")


df2 <- as.data.frame(mat)

df3 <- df2 %>%
   mutate(n = 1) %>%
   spread(variable, value) %>%
   select(-n)

我需要添加n 否则我会得到 NA,但我不喜欢它。

【问题讨论】:

  • 我刚刚意识到添加了第二行,因为我有两行数字。如果我只有一行“数字”(例如 df2

标签: html r tidyr data-cleaning reshape2


【解决方案1】:

这就是你所追求的吗?

mat <- as.matrix(df)
mat <- rbind(colnames(mat), mat)
colnames(mat) <- c("variable", "value")
mat
#      variable                  value   
# [1,] "is_employed"             "false" 
# [2,] "Hobbies"                 "squash"
# [3,] "Has Previous Experience" "false" 

as.data.frame(mat)
#                  variable  value
# 1             is_employed  false
# 2                 Hobbies squash
# 3 Has Previous Experience  false

【讨论】:

  • 感谢您的回复。不完全的。我不希望列名是“变量”、“值”,我希望列名是“is_employee”、“Hobbies”、“Has Previous Experience”。我无法弄清楚步骤(只需使用 tidyr 中的 spread() 即可用 NA 填充数据框)。
  • @JoeF 您能否更新您的原始问题以准确显示您希望输出的样子?
  • 我会将此标记为答案,因为它让我大部分时间
猜你喜欢
  • 2011-11-20
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2016-06-03
相关资源
最近更新 更多