【发布时间】:2017-03-08 05:39:37
【问题描述】:
当我在数据框的一列上调用 strsplit() 时,根据 strsplit() 的结果,有时会得到一个或两个“子列表”作为拆分的结果。例如,
v <- c("50", "1 h 30 ", "1 h", NA)
split <- strsplit(v, "h")
[[1]]
[1] "50"
[[2]]
[1] "1" " 30"
[[3]]
[1] "1 "
[[4]]
[1] NA
我知道我可以使用“[]”访问单独的拆分列表,“[[]]”告诉我这些子列表的内容,所以我想我明白这一点。而且我可以通过 split[[2]][2] 访问 [[2]] 中的“30”。
不幸的是,我不知道如何以编程方式访问我拥有的整个专栏。我正在尝试将列转换为数字数据。但是那个“1 h 30”的案例给我带来了很多麻烦。
func1 <- function(x){
split.l <- strsplit(x, "h")
len <- lapply(split.l, length)
total <- ifelse(len == 2, as.numeric(split.l[2]) + as.numeric(split.l[1]) * 60, as.numeric(split.l[2]))
return(total)
}
v <- ifelse(grepl("h", v), func1(v), as.numeric(v))
我知道 len 返回分割长度的向量。但是当涉及到实际访问该单个子列表的第二个元素时,我根本不知道如何正确地做到这一点。这将产生一个错误,因为 split.l[1] 和 split.l[2] 每次只会返回整个原始数据帧列的前两个元素。 [[1]] 和 [[2]] 也不起作用。我需要类似 [[i]][1] 和 [[i]][2] 的东西。但我试图不使用 for 循环和迭代。
长话短说,我如何以编程方式访问内部列表元素
作为参考,我确实看过这有帮助。但我仍然无法解决它。 apply strsplit to specific column in a data.frame
我在 R 中的列表和列表处理方面真的很苦恼,因此感谢您提供任何帮助。
【问题讨论】:
标签: r