test <- c (-0.0799 , 0.0003 , -0.0063 , 0.0000 , -3.3180 , 0.0000 , 0.0000)
v1 <- as.numeric(test)
v1
所以我首先分裂了元素:
l <- split(test, 1)
l
并且只是在字符中拆分元素:
a <- -0.0799
b <- as.numeric(strsplit(as.character(a), "")[[1]])
b
导致:[1] NA 0 NA 0 7 9
所以b的结果我试图检查并提取第一个非零元素,因此会导致: 7
问题: 如何提取第一个零序元素?
现在列中的列表创建列表:cl&lt; - data $ X
mybiglist <- list()
for(i in 1:length(cl){
print(cl[i])
f.split <- as.numeric(strsplit(as.character(cl[i]), "")[[1]])
print(f.split)
mybiglist[[i]] <- f.split
}
只留下创建列表中的每个列表以提取第一个非零值...并输出一个列表,如果是NA,则只保留该单元格的NA。考虑提取正则表达式,但我不熟悉R中的这种先进技术,我可以提取数字或部分字符串但不作为搜索,任何帮助都会很棒。
PS:最终目标是应用于数据框的一列并用于创建包含此条件的变量,如果条件不满足而不仅仅放置 NA ,那么最后会是一列为&#34; X&#34; as&#34; X_1&#34;和&#34; Y&#34; as&#34; Y_1&#34;具有如下数据的内容:如果列的每个单元格的值非零而不是提取第一个非零元素,并且如果是&#34; NA&#34;或&#34; 0&#34;超过价值将是&#34; NA&#34;。所以首先要弄清楚我是如何完成这项任务的,最后只是放入一个函数。
答案 0 :(得分:0)
- 创建向量以及“ 0 ”的任何内容,而不是“ NA ”
醇>
cl$X <- abs(cl$X) #absolute value to not have negative sign
cl$X
#converting missing to NA
cl$X[cl$Xt==0] <- NA
cl$X
mybiglist <- list()
for(i in 1:length(cl$X)){
print(cl$X[i])
f.split <- as.numeric(strsplit(as.character(cl$X[i]), "")[[1]])
print(f.split)
mybiglist[[i]] <- f.split
}
- 接下来将包含链接列表 [[]] 的代码 并通过每个子列表和子集变量迭代是&gt; 0 并输出到新列表new_vector2:
醇>
new_vector <- c()
for (i in 1:length(mybiglist)){
if (length(mybiglist[[i]]) > 1) {
print(i)
new_vector[[i]] <- subset(mybiglist[[i]], mybiglist[[i]] > 0)
} else {
new_vector[[i]] <- NA
}
}
new_vector
从每个列表中提取第一个位置元素:
final_var <- lapply(new_vector, `[`, 1) #completed
final_var