내 목표는 다른 변수의 값에 조건부로 일치하는 특정 문자열을 가진 여러 변수 중 하나의 새 변수에 값을 할당하는 것입니다. 더 구체적으로 :R : 다른 열에서 조건부로 값 바꾸기 및 변수 이름 일치
주어진 새 열 (예 : 'foo') 각각은 데이터 프레임에 이미있는 두 개의 열 중 하나의 값을 사용하고 이름이로 시작하는 데이터 프레임에 많은 열을 추가하려고합니다. 두 번째 접미사 (예 : 'foo.2009'및 'foo.2014') 중 하나를 사용하여 다른 열 (예 : '연도')의 값을 조건부로 사용하여 끝납니다. 데이터 프레임에도이 연산과 관련이없는 열이 포함되어 있으며 이러한 접미어가 부족하여 식별됩니다 (예 : 'other_example'이 '.2009'또는 '2014 '로 끝나지 않음). 그리고 새 이름의 벡터를 만들었습니다 열. 아래 예제 데이터에서 foo
에 foo.2014
의 값을 할당하려면 year >=2014
및 foo.2009
인 경우 year < 2014
으로 지정하고 싶습니다. 내 실제 데이터에서
# Original data frame
df <- data.frame(foo.2009 = seq(1,3),
foo.2014 = seq(5,7),
foo = NA,
bar = NA,
other_example = seq(20,22),
year = c(2014,2009,2014))
print(df)
# The vector of variable names ending in '.####`
names <- c("foo")
# Target data frame
df$foo <- c(5,2,7)
print(df)
, 나는 내가 bar == bar.2014
year >= 2014
경우 bar == bar.2009
year < 2014
경우 원하는 foo
(예를 들어 bar
)과 유사한 많은 변수가있다.
# The vector of variable names ending in `.####`
names <- c("foo","bar")
# Original data frame
df <- data.frame(foo.2009 = seq(1,3),
foo.2014 = seq(5,7),
bar.2009 = seq(8,10),
bar.2014 = rep(5,3),
foo = NA,
bar = NA,
other_example = seq(20,22),
year = c(2014,2009,2014))
df
# Target data frame
df$foo <- c(5,2,7)
df$bar <- c(5,9,5)
df
: 그래서 저는 내가 값을 대체 할 변수의 임의의 큰 수에 대한 변수 이름의 벡터 (예를 들어
names
를) 내가 할 수있는 루프를 통해 솔루션을 개발 (또는에서 벡터화 작업을 사용하는) 노력하고 있어요
저는 루프에서 변수 이름을 구성하는 여러 문자열을 평가하거나 벡터화 된 접근법을 사용해야 할 필요성 때문에 특히 문제가 있습니다. 다음은 dplyr :: mutate()를 사용하여 변수를 추가 한 다음 값을 할당하는 시도입니다. 아래는 위의 데이터와 동일하지만 재 코딩 할 추가 변수의 예입니다.
library(dplyr)
for (i in names){
var09 <- paste0(i, ".2009")
var14 <- paste0(i, ".2014")
dplyr::mutate_(df,
i = ifelse(df$year < 2010,
paste0("df$",i, ".2009"),
paste0("df$",i, ".2014")))}
보관하지 마십시오 열 이름의 변수; 대신에 긴 형태로 변형하면 이러한 회선을 피할 수 있습니다. – alistaire
불행히도이 형식의 데이터를 제공해야하므로 긴 형식의 데이터를 제공 할 수 없습니다. – QuestionAnswer
이 솔루션이 도움이 될 수 있습니다 http://stackoverflow.com/a/30271447/3893729 – MFR