R 按行挑出第一个未丢失的元素
假设我要执行以下操作: 1) 应用一些函数,用空格逐行替换不需要的字符; 2) 然后它(从原始数据中)逐行挑选出第一个非空元素(根据上面的转换) 以下是我现在拥有的:R 按行挑出第一个未丢失的元素,r,parallel-processing,data.table,R,Parallel Processing,Data.table,假设我要执行以下操作: 1) 应用一些函数,用空格逐行替换不需要的字符; 2) 然后它(从原始数据中)逐行挑选出第一个非空元素(根据上面的转换) 以下是我现在拥有的: library(data.table) data<-data.table(x=c("25&&&35&&1","&&&&","&&&&"), y=c("&&&&
library(data.table)
data<-data.table(x=c("25&&&35&&1","&&&&","&&&&"),
y=c("&&&&&","1","&&&&2"),
z=c("&&&&&","","1"))
function_select<-function(x){
x[gsub("&","",x)!=""][1]
}
data[,function_select(unlist(.SD)),.SDcols=c("x","y"),by=1:nrow(data)]
nrow V1
1: 1 25&&&35&&1
2: 2 1
3: 3 &&&&2
库(data.table)
数据避免R中的按行操作,如瘟疫。在这里,我可能会:
data[, lapply(.SD, sub, pattern = "^&*$", replacement = ""), .SDcols = x:y][
, as.matrix(.SD)[.SD != ""]]
#[1] "25&&&35&&1" "1" "&&&&2"
您应该显示预期的输出。第一个字符是通过子字符串选择的,而不是[1]
,因此您可能希望melt(data[,r:=.I][,c(“r”,“x”,“y”)],id=“r”)[value%like%”[^&],(variable=first(variable),char=substring(first(value),1L,1L)),by=r]
@弗兰克谢谢,我编辑了这个问题,它是第一个非空元素,我want@akrun那会更快吗?我看不出你的和梅因有什么不同answer@akrun我也有点不明白,为什么我们需要转置!转置是有意义的,因为您正在执行行操作,这在R中尤其是在data.table中非常笨拙。如果进行转置,则可以在列上进行迭代,这就不那么糟糕了。通常,我认为data.table最适合处理长格式数据的分组操作,比如melt(data[,r:=.I],id=“r”)