2016-10-06 3 views
-1

두 열 (var1var2)을 사용하여 새 데이터 프레임을 만들려고하는데, 각 열은 데이터 프레임 sampData의 특정 열의 행 합계입니다.벡터를 사용하여 열 선택

library(dplyr) 

sampData <- 
    rnorm(260) %>% 
    matrix(ncol = 26) %>% 
    data.frame() %>% 
    setNames(LETTERS) 

var1 <- c("A", "B", "C") 
var2 <- c("D", "E", "F", "G") 

은 내가 이런 []c() 사용하여 열을 선택할 수 있다는 사실을 알고 :

sampData[ ,c("A","B")] 

을하지만 난 생성하고이처럼 내 벡터에서 그 형식을 사용하려고하면

d1_ <-paste(var1, collapse=",") 
d2_ <-paste(var2, collapse=",") 

sampData[ ,d1_] 

이 오류가 발생합니다 :

Error in `[.data.frame`(sampData, , d1_) : undefined columns selected 

rowSums을 계산하려고하면 어느 것을 얻습니다. 이것이 내가 얻고 자하는 것입니다.

data.frame(var1 = rowSums(sampData[ , d1_]) 
      , var2 = rowSums(sampData[ , d2_]) 
+0

최근 수정 사항은 재현 가능한 데이터 (SQL 데이터베이스에 대한 액세스 권한이 없음)를 사용하여 오류 메시지의 발생 위치를 명확히합니다. –

답변

0

나는 당신이 요구하는 것을 알아 내기 위해 관리가 생각하지만, 만약 내가 잘못 알려주세요.

는 각 일치 열로 제한 행에 걸쳐 l1l2 및 합계의 값과 일치 prep에서 열을 선택하려고합니다. 당신은 모든 컬럼 인덱스를 연결할 필요가 없습니다, 그리고

sampData <- 
    rnorm(260) %>% 
    matrix(ncol = 26) %>% 
    data.frame() %>% 
    setNames(LETTERS) 

var1 <- c("A", "B", "C") 
var2 <- c("D", "E", "F", "G") 

- :

여기에, 재생 가능한 데이터를 제공하는 것이 더 낫다 (을 구축 할 dplyr 사용)이 경우 일부입니다 변수 (또는 귀하의 경우에는 열)를 직접 사용하십시오. 여기에 ID의 편지를 만들고 편지와 일치시킵니다. 그러나 ID가 숫자 인 경우 해당 색인과 일치합니다 (예 : 3은 세 번째 열을 반환합니다). 화면에 인쇄 한 후 노트의

data.frame(
    var1sums = rowSums(sampData[, var1]) 
    , var2sums = rowSums(sampData[, var2]) 
) 

, cat 반환 NULL. 값을 연결해야하는 경우 paste (또는 이와 비슷한 값)을 사용해야하지만 이 아니라이 여기에서 수행하려고합니다.

이 질문은 이러한 솔루션의 유연성에 대해 생각해 봤습니다. 따라서 dplyrtidyr을 사용하여 효과적으로 동일한 결과를 얻을 수 있습니다. 차이점은 변수 선택 또는 다운 스트림 처리에 더 많은 유연성을 제공 할 수 있다는 것입니다. 당신은 (일반적으로하거나 많은 수의)를 임의의 숫자이 있다면

sampData %>% 
    # add column for individual 
    mutate(ind = 1:nrow(.)) %>% 
    # convert data to long format 
    gather("Variable", "Value", -ind) %>% 
    # Set to group by the individual we added above 
    group_by(ind) %>% 
    # Calculate sums as desired 
    summarise(
    var1sums = sum(Value[Variable %in% var1]) 
    , var2sums = sum(Value[Variable %in% var2]) 
) 

그러나, 진짜 장점은에서 개별 금액을 얻고 싶었다 변수의 집합으로 올 것입니다. 관심을 가질만한 모든 열을 수동으로 구성하는 대신 표준 평가 (비표준과 반대)를 사용하여 명명 된 벡터 목록을 기반으로 열을 자동으로 생성 할 수 있습니다.

sampData %>% 
    mutate(ind = 1:nrow(.)) %>% 
    gather("Variable", "Value", -ind) %>% 
    group_by(ind) %>% 
    # Calculate one column for each vector in `varList` 
    summarise_(
    .dots = lapply(varList, function(x){ 
     paste0("sum(Value[Variable %in% c('" 
      , paste(x, collapse = "', '") 
      , "')])") 
    }) 
) 
+0

고맙습니다. 마지막 줄을이 DF3 <데이터로 변경했습니다.프레임에서 ( ) var1sums = rowSums (prep [, d1_]) , var2sums = rowSums (prep [, d2_]) ) 나는 동일한 오류를 받았습니다 :'[.data.frame' (prep, d1_)의 오류 : undefined 선택한 열 – user4797853

+0

열 선택 ('d1_'과'd2_'가 나온 곳)에서'paste'의 결과를 전혀 사용해서는 안됩니다. 예를 들어, 당신은'new.variable1.v'와'new.variable2.v'를 사용해야합니다. –

+0

도움이 되었으면 좋겠네요, 당신이 관심이 있다면 좀 더 일반적인 경우의 해결책을 위해 제 편집을보십시오. 나는 또한 당신이 무엇을하려고하는지 명확히하기 위해 질문을 편집 할 때 균열을 겪을 것입니다. –

관련 문제