2017-04-15 9 views
0

多くのユニークなIDで構成されたデータフレームtestDataがあります。 idmonthで範囲内のすべての可能な値を持っている場合私の目標は、それはその後、IDがmonthyday、と言い換えるweekベクターには範囲内のすべての値が含まれています

の範囲内の数値のすべてが含まれているか否かを識別するためにすべきですtを受け取ります。 idに範囲内のすべての値がydayである場合は、tを受信し、idに範囲内のすべての値がweekである場合は、tを受信する必要があります。それ以外の場合は、データのサンプルは次のようになりますf

を受ける必要があります。

> testData 
    id month yday week 
1 1  1 1 1 
2 3  1 2 1 
3 4  1 3 1 
4 2  1 4 1 
5 3  3 5 1 
6 4  1 6 1 
7 2  1 7 1 
8 3  1 8 2 
9 1  1 9 2 
10 5  1 10 2 
11 3  2 11 1 
12 4  1 12 1 
13 5  1 13 1 
14 1  1 14 1 

次のようなものになります出力:

> output 
    id month yday week 
1 1  f f t 
2 2  f f f 
3 3  t f t 
4 4  f f f 
5 5  f f t 

私は1つがいるかどうかを確認することができます知っているが数字はある範囲内にあり、ベクトル内の数字に範囲内のすべての整数が含まれているかどうかを確認する方法を提案する人もいますか?

> dput(testData) 
structure(list(id = c(1L, 3L, 4L, 2L, 3L, 4L, 2L, 3L, 1L, 5L, 
3L, 4L, 5L, 1L), month = c(1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 
1L, 2L, 1L, 1L, 1L), yday = 1:14, week = c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L)), .Names = c("id", "month", 
"yday", "week"), class = "data.frame", row.names = c(NA, -14L 
)) 

答えて

0

data.table

library(data.table) 
setDT(testdata) 
output<-testdata[,.(month=all(unique(testdata$month)%in%.SD$month),yday=all(unique(testdata$yday)%in%.SD$yday),Week=all(unique(testdata$week)%in%.SD$week)),by=(id)] 

output 
id month yday Week 
1: 1 FALSE FALSE TRUE 
2: 2 FALSE FALSE FALSE 
3: 3 TRUE FALSE TRUE 
4: 4 FALSE FALSE FALSE 
5: 5 FALSE FALSE TRUE 
+0

鉱山を投稿する際にあなたの答えを見ていません。私の推測はより一般的であり、より多くの数の列に適応することができます。すべての列を扱う私の 'Map'方法を含めるように編集してください。私は私の答えを削除します。 – nicola

+0

私はあなたの答えを見ることができません。あなたはすでに削除しましたか? –

0

で簡単にはここdplyrでそれを行う方法は次のとおりです。

library(dplyr) 
testData_copy <-testData 
testData %>% 
group_by(id) %>% 
summarise(month=n_distinct(month)== n_distinct(testData_copy$month), 
      yday =n_distinct(yday) == n_distinct(testData_copy$yday), 
      week =n_distinct(week) == n_distinct(testData_copy$week) 
) 

# A tibble: 5 × 4 
    id month yday week 
    <int> <lgl> <lgl> <lgl> 
1  1 FALSE FALSE TRUE 
2  2 FALSE FALSE FALSE 
3  3 TRUE FALSE TRUE 
4  4 FALSE FALSE FALSE 
5  5 FALSE FALSE TRUE 
関連する問題