如何使用另一个vector的名称创建新的vector,并在for循环中追加到每个vector?

jw5wzhpr  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(85)

我有一个很大的数组,在不同的列中有值。我还有一个名称向量(“prover”),我想遍历它,扫描数组中的一行(“Analys”)寻找匹配的值。然后我想选择高于或低于某个值的值,并将1或0附加到一组新的向量中,以我的“name vector”中的名称命名。
我已经尝试了下面的变体,使用paste或paste0,但得到不同的错误代码。我在这里发现了类似的问题,但还没有设法得到任何我试图工作的东西。我也尝试了lapply(没有for循环),但得到以下错误:“the condition has length > 1 and only the first element will be used”。

for (i in 1:length(prover)){
  if (larm_age$Analys == prover[i]){
    if (larm_age$Ålder >= 18){
      if (larm_age$Res <= ngräns_v || larm_age$Res >= ögräns_v){
        paste(prover[i], sep="") <- 1
      }else{
        paste(prover[i], sep="") <- 0
      }
    }else if (larm_age$Ålder <= 18 && larm_age$Ålder >= 0.1){
      if (larm_age$Res <= ngräns_b || larm_age$Res >= ögräns_b){
        paste(prover[i], sep="") <- 1
      }else{
        paste(prover[i], sep="") <- 0
      }
    }else if (larm_age$Ålder <= 0.1){
      if (larm_age$Res <= ngräns_s || larm_age$Res >= ögräns_s){
        paste(prover[i], sep="") <- 1
      }else{
        paste0(prover[i], sep="") <- 0
      }
    }
  }  
}

字符串
我做错了什么?我知道可能有一个函数,在某个地方,做这个,比我想做的要简单得多。

nhaq1z21

nhaq1z211#

所以,我从你的问题中理解到:
你有一个列analys和一个列alder。让analys的值为abc
我为您创建了一些简化的示例数据,基于我假设您正在尝试实现的目标。
我想你是想对alder变量进行分类。然后你想分析哪些年龄组在analys中有什么样的匹配。我省略了res变量,因为它只是增加了另一个测试层。
计算很便宜,所以不需要只计算analys中匹配的类别。将category设为变量。然后用prover测试analys中的匹配。如果prover非常大,我的测试方法可能不是理想的解决方案。
我认为你想做这个作为准备工作,然后做另一个分析,再次得出prover匹配的不同组合的结论(在这种情况下,由01在test_.列中表示)和categories。你也可以使用case_when()
如果你和我们分享一个最小的reprex,加上想要的输出,这将更容易解决你的问题:)
与此同时,我正在寻找一种解决方案来自动化prover测试,而无需for循环。

library(dplyr)
df <- tibble(analys = rep(c("a", "b", "c"), times = 3),
             alder = c(1, 5, 18, 20, 45, 23, 0.05, 0, 0.1),
             id = 1:9)

df |> 
  mutate(category = case_when(alder < 18 & alder >= 0.1 ~ "child",
                              alder >= 18 ~ "grownup",
                              alder < 0.1 ~ "newborn"),
         test_a = case_when(analys == "a" ~ 1,
                            .default = 0),
         test_b = case_when(analys == "b" ~ 1,
                            .default = 0))

字符串
结果如下:

analys alder category test_a test_b
  <chr>  <dbl> <chr>     <dbl>  <dbl>
1 a       1    child         1      0
2 b       5    child         0      1
3 c      18    grownup       0      0
4 a      20    grownup       1      0
5 b      45    grownup       0      1
6 c      23    grownup       0      0
7 a       0.05 newborn       1      0
8 b       0    newborn       0      1
9 c       0.1  child         0      0

相关问题