добавить результаты цикла в вектор - PullRequest
2 голосов
/ 07 ноября 2019

Я пытаюсь получить список имен переменных, в которых значение «a» больше или равно 2, и, наконец, сохранить его в векторе Morethan2 и аналогично сделать для lessthan2. Пожалуйста, помогите мне достичь этого.

df <- data.frame(a1 = c("a","a","b"),a2 = c("a","b","b"),a3 = c("a","a","a"))
for(x in names(df[1:3])){
  if(sum(df[x] =="a") >= 2){
    more2 = x
    } else{less2 = x}}
Lessthan2 = less2
Morethan2 = more2

Ожидаемый результат:

Morethan2  : 'a1','a3'
Lessthan2  : 'a2'

Ответы [ 2 ]

1 голос
/ 07 ноября 2019
df <- data.frame(a1 = c("a","a","b"),a2 = c("a","b","b"),a3 = c("a","a","a"))
more2 <- c()
less2 <- c()
for(x in names(df[1:3])){
  if(sum(df[x] =="a") >= 2){
    more2[x] = x
  } else{less2 [x] = x}}
1 голос
/ 07 ноября 2019

Мы можем использовать colSums, чтобы получить счетчик "a" в каждом столбце, а затем поднастроить его, чтобы получить morethan2 и lessthan2.

inds <- colSums(df == "a")
morethan2 <- names(inds)[inds >= 2]
lessthan2 <- names(inds)[inds < 2]

morethan2
#[1] "a1" "a3"
lessthan2
#[1] "a2"

Если мы хотимиспользовать for цикл, мы можем сделать

i <- 1
j  <- 1
more2 <- numeric()
less2 <- numeric()

for(x in names(df)) {
   if(sum(df[[x]] =="a") >= 2) {
      more2[i] = x
     i= i + 1
   } else {
     less2[j] = x
     j = j + 1
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...