5 개의 변수 (열)가있는 데이터베이스가 있습니다. 하나의 특정 열의 특정 값이 있는지 확인하기 위해 데이터 프레임을 부분 집합 화하려고합니다. 이 경우 1, 그 외에는 0을 지정하십시오. 그런 다음 결과 (1 또는 0)를 제한된 데이터 프레임의 특정 열에 붙여넣고 계속하십시오.lapply 또는 for 루프의 결과를 특정 행에 추가하는 방법
데이터 프레임은 다음과 같습니다 :
## Year Month Product Supermarket Price
## 2015 1 67 1 10
## 2015 1 65 1 11
## 2015 1 69 1 15
## 2015 2 65 2 20
## 2015 2 67 2 25
## 2015 2 67 3 15
## 2015 2 69 3 12
가 지금은 각각의 년, 월 및 슈퍼마켓에 대한 제한 및 제품 = 65가 존재하는지 확인하고 싶습니다. 그럴 경우, 새로운 변수 (열)로 제한된 행에 1을 대입하십시오. 그렇지 않은 경우, lapply 사용하여 0
내가 시도 할당 :
prueba <- function(x)
ifelse(any(base$Product == 65), 1, 0)
lapply(unique(base$Supermarket) & unique(base$Year) & unique(base$Month),
base$NewVar <- prueba)
을하지만, 다음과 같은 결과
Error in rep(value, length.out = nrows) :
attempt to replicate an object of type 'closure'
다음을 가지고, 내가 만들려고 for 루프 :
for(i in unique(base$Supermarket)) {
for(j in unique(base$Year))
for(h in unique(base$Month)) {
try <- ifelse(any((filter(base, Supermarket == i, Year == j, Month == h))$Product == 65), 1, 0)
base[base$Supermarket == i && base$Year ==j && base$Month == h,]$NewVar <- try
}
}
}
다음 결과를 얻었습니다.
Error in if (nrow(try) == 0) { : argument has zero lenght
데이터베이스에 5 천만 개의 행이 있으므로 속도가 문제가 될 수 있습니다 (루프 대신에 lapply를 사용하려고합니다). 올바른 결과를 얻는 방법을 모르겠습니다. 다음 :
## Year Month Product Supermarket Price NewVar
## 2015 1 67 1 10 1
## 2015 1 65 1 11 1
## 2015 1 69 1 15 1
## 2015 2 65 2 20 1
## 2015 2 67 2 25 1
## 2015 2 67 3 15 0
## 2015 2 69 3 12 0
전체적인 문제를 해결하는 방법을 모르십시오. lapply를 사용할 때 "올바른"대답을 얻었지만 그 결과를 데이터 프레임의 오른쪽 행에 붙여 넣을 수 없었습니다.
미리 감사드립니다.
고마워요, @akrun. 제품이 포함되어야하는 이유를 알고 계십니까? 또한,이 환경에서 무엇을 하는가? (도움말을보고 R 표현식을 평가한다고하자.) 아름답고 단순함 –
@LeandroZipitria 첫 번째 ie 제품 이후, 다른 모든 변수는 그룹화 변수이므로'x'는'Product 'with '는 우리가'df1 $ Product','df1 $ Year' 등을 사용할 필요가 없도록하기 위해 사용되며, 조금 더 어리 석질 수 있습니다. – akrun
많은 시간을 배웠습니다. . –