L oop вдоль столбца кадра данных с условным предложением - PullRequest
0 голосов
/ 09 января 2020

У меня есть следующий набор данных:

FO.1  Pilot T.O
VAM   F
CAM   F
LYA   C
FRZ   F
DYN   F
VAM   F
VAM   C
CAM   F

Я хотел бы запустить al oop вдоль столбца FO#1 и столбца Pilot T/O. L oop должен идентифицировать каждый FO # 1 и, если T / O Pilot равен F или C. Например, если FO # 1 - VAF, результат должен показать мне, сколько раз Pilot T / O принимает значение F или C.

Я пробовал следующее:

#Loading the dataset
test2 <- read.xlsx(file = 'test.xlsx', 1)
#Count
count=0
#Loop across the elements of FO.1 column
for (i in test2$FO.1)
{
#Conditional sentence to check if the element takes the value F
  if (test2$Pilot.T.O[i] == 'F')
  {
  #We add 1 to the count
  count[i] <- count+1
  }
}

Однако я получаю следующее сообщение об ошибке:

Error in if (test2$Pilot.T.O[i] == "F") { : 
missing value where TRUE/FALSE needed

1 Ответ

1 голос
/ 09 января 2020

Вот базовое решение R:

  • решение 1: использование sapply() + table()
res <- sapply(c("C","F"), function(x) table(df)[,x])

такое, что

> res
    C F
CAM 0 2
DYN 0 1
FRZ 0 1
LYA 1 0
VAM 1 2

или просто res <- table(df)

> res
     Pilot T.O
FO.1  C F
  CAM 0 2
  DYN 0 1
  FRZ 0 1
  LYA 1 0
  VAM 1 2
  • решение 2: с использованием split() + table()
res <- Map(table,split(df,df$FO.1))

таким, что

> res
$CAM
     Pilot T.O
FO.1  F
  CAM 2

$DYN
     Pilot T.O
FO.1  F
  DYN 1

$FRZ
     Pilot T.O
FO.1  F
  FRZ 1

$LYA
     Pilot T.O
FO.1  C
  LYA 1

$VAM
     Pilot T.O
FO.1  C F
  VAM 1 2

ДАННЫЕ

df <- structure(list(FO.1 = c("VAM", "CAM", "LYA", "FRZ", "DYN", "VAM", 
"VAM", "CAM"), `Pilot T.O` = c("F", "F", "C", "F", "F", "F", 
"C", "F")), class = "data.frame", row.names = c(NA, -8L))
...