从向量元素

时间:2016-10-17 04:54:03

标签: r

这是我希望以同样的方式工作的载体

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;。所以首先要弄清楚我是如何完成这项任务的,最后只是放入一个函数。

1 个答案:

答案 0 :(得分:0)

如果有人有同样的问题/任务

,我会发帖回答
  
      
  1. 创建向量以及“ 0 ”的任何内容,而不是“ NA
  2.   
    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
    }
  
      
  1. 接下来将包含链接列表 [[]] 的代码   并通过每个子列表和子集变量迭代是&gt; 0 并输出到新列表new_vector2:
  2.   
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

sample output of the vector with 1 element only