저는 CFM_1에서 CFM_100까지 100 개의 변수를 설정했습니다. 각 변수는 1,2,3 또는 4의 값을 가질 수 있습니다. TEMP라는 새 변수를 만들려고합니다.이 변수는 CFM_1에서 CFM_100 변수 중 하나에 1 또는 2 값이 있으면 값 1을 갖습니다. 보다 효율적인 솔루션으로 편집이R 프로그래밍 - 변수 100 개를 기반으로하는 값에서 새 변수 만들기
답변
이 예제에서는 임의의 변수가이 행렬의 단일 위치에서 1 또는 2를 생성한다는 확률이 1/2이기 때문에 약간 바보입니다. 행렬의 각 열에 대해 하나씩이 열 번을 수행하면 주어진 행에 대해 임시 변수가 TRUE가 될 확률이 1 % 미만입니다. 어쨌든, 여기갑니다.
df <- data.frame(replicate(5, sample(1:4, 10, replace = TRUE)))
names(df) <- paste("CFM", 1:ncol(df), sep = "_")
데이터 프레임은 제외하고자하는 데이터 프레임에서 다른 변수를 가지고, 지금은 가정하자이
df
CFM_1 CFM_2 CFM_3 CFM_4 CFM_5
1 2 2 1 4 4
2 2 2 1 3 4
3 2 1 1 3 3
4 1 2 3 3 2
5 3 4 2 4 4
6 3 4 4 2 2
7 3 1 3 2 2
8 1 2 4 1 2
9 3 2 1 3 2
10 1 3 1 4 3
것 같습니다. 다음과 같이 cbind를 사용하여 이러한 열을 데이터 프레임 앞에 추가합니다.
df <- cbind(replicate(3,sample(1:4, 10, replace = T)),
df,
replicate(3,sample(1:4, 10, replace = T)))
names(df)[1:3]<- paste0("Var",1:3)
names(df)[9:11] <- paste0("Var", 9:11)
는 이제 DF 당신은 각 행의 데이터의 경우 확인하기 위해 데이터 행에 어떤 기능을 적용하여 변수에 임시로 값을 지정할 수 있습니다이
df
Var1 Var2 Var3 CFM_1 CFM_2 CFM_3 CFM_4 CFM_5 Var9 Var10 Var11
1 4 1 4 4 1 3 1 3 1 3 1
2 4 2 3 2 4 3 2 1 2 3 3
3 4 2 4 4 2 1 1 2 2 3 2
4 4 4 2 4 4 1 3 2 2 1 2
5 4 2 1 4 4 4 1 1 2 2 2
6 1 4 2 3 1 4 4 2 1 3 2
7 3 2 4 4 2 3 4 3 1 1 1
8 1 3 3 3 3 2 3 3 2 2 2
9 3 3 2 1 4 3 4 1 4 2 1
10 2 1 1 2 1 2 4 1 2 1 1
처럼 보인다 1 또는 2 중 하나입니다.하지만 먼저 어떤 열이 데이터인지 알아야합니다.
agrep
함수를 사용하여 근사 문자열 일치를 수행 할 수 있습니다. 당신이
cfm_cols <-agrep("CFM", names(df))
cfm_cols
[1] 4 5 6 7 8
temp <- apply(df[,cfm_cols], 1, function(x) any(x) %in% c(1,2))
temp
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
을 사용하는 경우 그것은 그들이 모든 TRUE
입니다, 데이터 프레임의 이름이 문자를 그들 "CFM"
있던 당신을 말할 것이다. 당신이 좋아하면
또 다른 해결책은, 나는 당신의 의견에 따라 내 대답을 편집이
library(dplyr)
df%>% rowwise() %>% select(contains("CFM")) %>%
mutate(TEMP = any(.) %in% c(1,2))
보기 확률에 관해서, OP는 변수가 무작위라고 말하지 않았다. 이 데이터 세트에서 값의 분포를 알 수 없습니다. 3보다 작은 값은 극히 드문 경우가 있습니다. – rosscova
@rosscova 감사합니다! 나는 무작위로 표본을 추출한 이후로 "나의 본보기"가 아니라 "당신의 본보기"를 의미했습니다. 어쨌든, 저는 두 가지 효율적인 방법을 제공했다고 생각합니다. – shayaa
Ahh, 알겠습니다.) ... 그렇습니다. 당신의 대답은 특히 'dplyr', 좋은 일로 매우 효율적입니다. 비슷한 것을 시도했지만 작동하지 못했습니다. 하나 더하기. – rosscova
에 적합한 R 코드는, 부분적으로
이첫 번째 줄은 여기에 (당신이 관심에만 열을 추출하여 임시 dataframe을 만듭니다 ... @의 shayaa의 대답에서 조달/도난 우리가 함께 할 때 우리는) 그것을 제거 할 수 있습니다 :
new <- subset(df, select = paste0("CFM_", seq_len(100)))
df$TEMP <- 1 * (apply(new, 1, min) <= 2)
rm(new)
그래서 방금 지정한 값 중 하나에 대한 각각의 전체 행을 검색하는, 부울 결과를 숫자로 변환하고 원래 데이터 프레임에 배치합니다.
죄송합니다. 이것을 해독 할 수 없습니다. 가능하면 조금 자세하게 설명하십시오. CFM 변수는 어디에서 볼 수 있습니까? –
죄송합니다. 저는 여러분이 언급 한 "100 개의 변수"가 100 열의 데이터 프레임에있는 열이라고 가정한다는 사실을 포함해야합니다. 필자가 제공 한 코드는 모든 열을 조사하므로 열을 이름으로 호출 할 필요가 없습니다. 계산에서 제외해야 할 열이 더 많으면 코드가 조금 변경됩니다. – rosscova
예 상황은 약 300 열과 데이터 프레임이 있지만 그 중 100 개에만 관심이 있습니다. 나는 너의 설명을 이해했다. 하지만 내가 관심있는 사람들 만 포함하고 싶다면 문법의 변화를 알려주시겠습니까? 도움을 많이 주셔서 감사합니다. –
- 1. R - if 문을 사용하여 새 변수 만들기
- 2. Tableau에서 새 변수 만들기
- 3. R 루프에서 변수 만들기
- 4. 다른 변수 (R)를 기반으로하는 이름의 변수 값 얻기
- 5. 루프 밖으로 변수 만들기 R
- 6. powershell에서 새 전역 변수 만들기
- 7. 변수 값에서 상수 설정
- 8. 문자열을 선택하고 논리식을 사용하여 새 변수 만들기 - R
- 9. 기존 변수에 따라 기존 변수에 따라 새 변수 만들기 R
- 10. 데이터 프레임 내의 다른 열에서 R 조건부 새 변수 만들기
- 11. 새 변수 만들기 및 중첩 루프 만들기
- 12. 많은 열을 사용하여 새 변수 만들기
- 13. R 열의 uniqe 값에서 동적으로 새 열 만들기
- 14. R - 변수
- 15. R - 변수
- 16. wordpress에서 변수 변수 만들기
- 17. 고유 한 변수 만들기
- 18. 숫자 변수에서 카테고리 변수 만들기 R
- 19. 불균형 패널 데이터의 지연 변수 만들기 R
- 20. 새 인스턴스 만들기 또는 내부 변수 설정
- 21. 클래스에 새 변수 만들기 어떻게 변수 이름을 바꿀 수 있습니까?
- 22. 다른 세 변수 사이의 비교를 기반으로 새 변수 만들기
- 23. 애니메이션이 변수 값에서 멈추지 않습니다.
- 24. 변수 값에서 사전 이름 지정
- 25. 동적 변수 이름 R
- 26. 변수 배열에 새 변수 추가
- 27. db를 기반으로하는 템플릿에 변수 전달
- 28. 변수 값을 기반으로하는 WHERE 문
- 29. 사전의 값에서 dataGridView의 새 열 만들기
- 30. 연결된 값에서 새 행렬 열 만들기
의
dplyr
라이브러리를 사용하는 것입니다. – shayaa답변 해 주셔서 감사합니다. 특히 Shayaa. 놀라운 하나. –
답변에 가까운 확인란을 클릭하면 가장 도움이 된 항목을 선택할 수 있습니다. – shayaa