मेरे पास निम्न प्रारूप में डेटा.फ्रेम है:

CowId    Bacillus    Week
1234     1           Week1
1234     0           Week2
1234     0           Week3
1234     0           Week4

यदि एक गाय सप्ताह 1 पर बैसिलस-पॉजिटिव (हाँ = 1, नहीं = 0) है, तो मैं इस कॉलम के शेष मानों को 1 में बदलना चाहता हूं, जैसे:

CowId    Bacillus    Week
1234     1           Week1
1234     1           Week2
1234     1           Week3
1234     1           Week4

मैंने निम्नलिखित कोशिश की, लेकिन यह अनिश्चित था कि सप्ताह 1 गायों की संक्रमण स्थिति का निर्धारण करने के बाद कैसे आगे बढ़ना है:

dt %>%
    group_by(CowId) %>%
    mutate(Bacillus = ifelse(Week == "Week1" & Bacillus, 1,
                          ifelse(Week != "Week1" do something)

किसी भी टिप्पणी/प्रतिक्रिया की सराहना करें।

0
Christopher Dean 23 सितंबर 2020, 19:57

2 जवाब

सबसे बढ़िया उत्तर

any() और सप्ताह के लिए परीक्षण का उपयोग करके इस दृष्टिकोण को आजमाएं। मैंने उदाहरण दिखाने के लिए डमी डेटा बनाया है:

library(dplyr)
library(tidyr)
#Code
df %>% group_by(CowId) %>%
  mutate(Bacillus=ifelse(any(Bacillus[Week=='Week1']==1),1,0))

आउटपुट:

# A tibble: 8 x 3
# Groups:   CowId [2]
  CowId Bacillus Week 
  <dbl>    <dbl> <chr>
1  1234        1 Week1
2  1234        1 Week2
3  1234        1 Week3
4  1234        1 Week4
5  1235        0 Week1
6  1235        0 Week2
7  1235        0 Week3
8  1235        0 Week4

उपयोग किए गए कुछ डेटा:

#Data
df <- structure(list(CowId = c(1234, 1234, 1234, 1234, 1235, 1235, 
1235, 1235), Bacillus = c(1, 0, 0, 0, 0, 0, 0, 0), Week = c("Week1", 
"Week2", "Week3", "Week4", "Week1", "Week2", "Week3", "Week4"
)), row.names = c(NA, -8L), class = "data.frame")
0
Duck 23 सितंबर 2020, 20:04

base R में, हम 'बैसिलस' & 'सप्ताह' के साथ एक तार्किक वेक्टर बना सकते हैं, जहां इसका मान 'वीक1' है, 'काउआईड' को सब्मिट करें, जांचें कि यह 'काउआईड' में है या नहीं। बाइनरी के लिए तार्किक (+)

df$Bacillus <- with(df, +(CowId %in% unique(CowId[as.logical(Bacillus) &
           Week == 'Week1'])))
df$Bacillus
#[1] 1 1 1 1 0 0 0 0

आंकड़े

df <- structure(list(CowId = c(1234, 1234, 1234, 1234, 1235, 1235, 
1235, 1235), Bacillus = c(1, 0, 0, 0, 0, 0, 0, 0), Week = c("Week1", 
"Week2", "Week3", "Week4", "Week1", "Week2", "Week3", "Week4"
)), row.names = c(NA, -8L), class = "data.frame")
0
akrun 23 सितंबर 2020, 22:24