首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Reshape2清洗HTML表

用Reshape2清洗HTML表
EN

Stack Overflow用户
提问于 2014-11-12 09:39:53
回答 1查看 101关注 0票数 0

R.的新用户根本想不出怎么问这个问题。我为HTML表格抓取了一个网页。一般来说,一切都很顺利,除了一张桌子。不存在7个单独的表,而是将所有内容折叠到一个表中,其中第一个表的列名和值为两个单独的列,所有其他表都是行。结果如下所示:

代码语言:javascript
复制
df <- data.frame(is_employed = c("Hobbies", "Has Previous Experience"), false = c("squash", "false"))

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

代码语言:javascript
复制
df <- dcast(df, ~is_employed, value.var = "false")

但收到了一条错误信息。然后我想增加另一栏,如下:

代码语言:javascript
复制
df2 <- data.frame(number = c(1, 2), is_employed = c("Hobbies", "Has Previous Experience"), false = c("squash", "false"))

然后我试着

代码语言:javascript
复制
df3 <- dcast(df2, number ~is_employed, value.var="false")

它将值作为自己的列放置在第一列中,但是产生了带有NAs的两行(而不是1)。我相信这是很基本的,但我搞不懂。

编辑:我想这给了我我想要的东西,但是我离我的电脑很远,所以我无法确认:

代码语言:javascript
复制
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,否则我得到NAs,但我不喜欢它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 20:14:43

这就是你想要的吗?

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26883650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档