R에서 dplyr 구문을 사용하여 작성한 광범위한 코드 블록이 있습니다. 그러나 루프에 해당 코드를 넣으려고합니다. 궁극적으로 하나의 파일이 아닌 여러 개의 출력 파일을 만들 수 있습니다. 불행히도 그렇게 할 수없는 것처럼 보입니다. 내 문제에 대한 설명을 위해dplyr 구문을 사용하여 "for"루프에서 "for"루프를 작성하는 방법
,의는 R에서 일반적으로 사용되는 "아이리스"데이터 세트를 참조하자
> data("iris")
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num
$ Sepal.Width : num
$ Petal.Length: num
$ Petal.Width : num
$ Species : Factor w/ 3 levels "setosa","versicolor","virginica"
이의 내가 종 "베르"의 평균 Petal.Length을 저장할한다고 가정 해 봅시다. dplyr 코드는 다음과 같이 수 : 다음과 같은 값을 줄 것
MeanLength2 <- iris %>% filter(Species=="versicolor")
%>% summarize(mean(Petal.Length)) %>% print()
:
mean(Petal.Length)
1 4.26
는 종의 모든 평균 꽃잎의 길이를 얻을 수있는 루프를 만드는 시도를 할 수 있습니다.
내가 루프 알고 작은 것과, 나는 이런 식으로 뭔가를 할 것이다 : 어떤 이유
for (i in unique(iris$Species))
{
iris %>% filter(iris$Species==unique(iris$Species)[i]) %>%
summarize(mean(iris$Petal.Length)) %>% print()
print(i)
}
을, 나는 데이터 프레임 일반적으로하지 않습니다 루프 내부의 열을 지정했다 케이스는 dplyr의 배관 기능을 사용하는 동안. 나는 이것이 문제의 지표라고 가정하고 있습니다.
mean(iris$Petal.Length)
1 3.758
[1] "setosa"
mean(iris$Petal.Length)
1 3.758
[1] "versicolor"
mean(iris$Petal.Length)
1 3.758
[1] "virginica"
그래서 코드 3.758 세 번 출력되고, 데이터 세트 내의 모든 종에 걸쳐 평균 꽃잎 길이 :
여하튼, 상기 코드는 다음과 같은 출력을 제공한다. 이것은 "필터"코드가 예상대로 작동하지 않음을 나타냅니다. 내가 알 수 있듯이, 루프 자체가 의도 한대로 작동하는 것처럼 보입니다. 세 개의 고유 한 종 이름이 모두 최종 결과물에 인쇄 되었기 때문입니다.
for 루프를 사용하여 어떻게 이런 일을 할 수 있습니까? 이 특별한 연습에서는 예를 들어 dplyr의 "group_by"함수를 사용하여 모든 종의 평균 꽃잎 길이를 쉽게 얻을 수 있으므로 환상적인 루프를 사용하지 않아도된다는 것을 이해합니다. 100 개의 고유 한 테이블과 PDF 파일은 내가 작업하고있는 데이터 세트를 가지고 있고 루프를 사용하는 방법을 아는 것은 그 목적에 도움이 될 것입니다. 난 당신이 정말 결과가 분리해야하는 경우, 아마 group_by
를 사용하는 것이 더 쉬울 것이다, 내 댓글에서 언급 한 바와 같이
도움이되기를 바랍니다 group_by'를 만든 다음 결과를 원하는 조각마다 요소가있는 목록으로'split() '합니다. – joran
아래 코드를 보내 주셔서 감사합니다. 데이터 세트가이 질문에 대해 참조한 홍채 데이터보다 더 복잡하지만 필자가 권장하는 작업 흐름을 활용하여 내가 원하는 것을 할 수 있다고 생각합니다. –
for-loop 내부는'iris %> % filter (Species == i) %> % summarize (평균 (Petal.Length)) %> % print()'이어야합니다. 그러면 각 종마다 다른 수를 만들어 낼 것입니다. –