我感觉像是一个困难的数据操作问题,我希望得到一些指导。这是我当前数组的测试版本,以及我希望获得的数据帧:
dput(test)
c("<play quarter=\"1\" oncourt-id=\"\" time-minutes=\"12\" time-seconds=\"0\" id=\"1\"/>", "<play quarter=\"2\" oncourt-id=\"\" time-minutes=\"10\" id=\"1\"/>")
test
[1] "<play quarter=\"1\" oncourt-id=\"\" time-minutes=\"12\" time-seconds=\"0\" id=\"1\"/>"
[2] "<play quarter=\"2\" oncourt-id=\"\" time-minutes=\"10\" id=\"1\"/>"
desired_df
quarter oncourt-id time-minutes time-seconds id
1 1 NA 12 0 1
2 3 NA 10 NA 1
我正在处理一些问题:
我已经尝试过使用strsplit(test,“”)来首先拆分空格,这些空格只存在于不同的列之间,但后来又返回了一个难以处理的列表列表。
答案 0 :(得分:4)
你有xml。您可以解析它,然后对结果运行rbindlist
。这可能比尝试将名称 - 值对分割为字符串要轻松得多。
dflist <- lapply(test, function(x) {
df <- as.data.frame.list(XML::xmlToList(x))
is.na(df) <- df == ""
df
})
data.table::rbindlist(dflist, fill = TRUE)
# quarter oncourt.id time.minutes time.seconds id
# 1: 1 NA 12 0 1
# 2: 2 NA 10 NA 1
注意:此解决方案需要 XML 和 data.table 包。