我正在使用unname
加上一些其他内置函数来获取字符串中的前两位数字,表示时间如下:
v = vapply(vec, function(x) {
as.numeric(unname(strsplit(x, ":")[[1]][1]))
}, 1)
问题是,现在这会返回命名输出:
19:22 13:30 13:30 17:00 19:20 17:00 14:15 17:00 13:30 19:15
19 13 13 17 19 17 14 17 13 19
我使用的是大型data.table
,所以我想要提高效率,即不必两次运行unname
。 为什么unname
上面没有任何效果?
这是我到目前为止所做的尝试:
unname
和as.numeric
以下是vec
的样子:
> vec
[1] "19:22" "13:30" "13:30" "17:00" "19:20" "17:00" "14:15" "17:00" "13:30" "19:15"
答案 0 :(得分:0)
您可以使用sapply
:
vec<-c("19:22", "13:30" ,"13:30" ,"17:00", "19:20", "17:00" ,"14:15", "17:00", "13:30" ,"19:15")
as.numeric(sapply(vec,function(x){strsplit(x,':')[[1]][1]}))
[1] 19 13 13 17 19 17 14 17 13 19
答案 1 :(得分:0)
我的猜测是/meteor/locals/
正在发挥作用,但是unname
本身会得到最终的说法&#34;可以这么说,因为它的vapply
默认为USE.NAMES
,所以你得到了名字。例如,
TRUE
所以你真的不需要使用R> (v <- vapply(vec, function(x) {
as.numeric(unname(strsplit(x, ":")[[1]][1]))
}, 1, USE.NAMES = FALSE))
#[1] 19 13 13 17 19 17 14 17 13 19
##
R> (v2 <- vapply(vec, function(x) {
as.numeric(strsplit(x, ":")[[1]][1])
}, 1, USE.NAMES = FALSE))
#[1] 19 13 13 17 19 17 14 17 13 19
,正如第二个例子所展示的那样。