Существует ли метод типа apply, который позволяет нам перебирать data.frame
и обрабатывать строки точно так же, как если бы мы были в цикле?Когда я делаю apply(df, 1, function(row){...})
, row
, переданный функции функции, НЕ является фактической data.frame
строкой.
df = data.frame(A=rnorm(3), B=letters[1:3])
for (i in 1:3)
{
row = df[i,]
print(row)
print(class(row))
print(typeof(row))
print(row$A)
print(row$B)
}
apply(df, 1, function(row)
{
print(row)
print(class(row))
print(typeof(row))
print(row$A)
print(row$B)
})
> df = data.frame(A=rnorm(3), B=letters[1:3])
>
> for (i in 1:3)
+ {
+ row = df[i,]
+ print(row)
+ print(class(row))
+ print(typeof(row))
+ print(row$A)
+ print(row$B)
+ }
A B
1 0.4179416 a
[1] "data.frame"
[1] "list"
[1] 0.4179416
[1] a
Levels: a b c
A B
2 1.35868 b
[1] "data.frame"
[1] "list"
[1] 1.35868
[1] b
Levels: a b c
A B
3 -0.1027877 c
[1] "data.frame"
[1] "list"
[1] -0.1027877
[1] c
Levels: a b c
>
> apply(df, 1, function(row)
+ {
+ print(row)
+ print(class(row))
+ print(typeof(row))
+ print(row$A)
+ print(row$B)
+ })
A B
" 0.4179416" "a"
[1] "character"
[1] "character"
Show Traceback
Rerun with Debug
Error in row$A : $ operator is invalid for atomic vectors
Редактировать 1
A комментарий кэтот ответ говорит, что apply
превращает data.frame
в матрицу, так что вы в итоге получаете векторы.Я думаю, что это проблема.Может быть, время для выделенного data.frame
итератора?
Редактировать 2
Как указал @thelatemail, это действительно может быть дубликат Для каждой строки в R-кадре данных .