0

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,但我不喜欢它。

4

1 回答 1

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
于 2015-04-16T20:14:43.347 回答