有一种情况,我的代码在某个列上使用arrange
-例如col1
,但是如果该行没有该列的可用数据,那么我希望它使用{ {1}},如果col2
不可用,那么我希望它使用col2
,依此类推,直到col3
。
目前如此:
col6
目前已应用与此类似的方法,但需要使其针对上述不同情况更加灵活:
df <- data.frame(col1 = c("NA", "1999-07-01", "NA"),
col2 = c("NA", "09-22-2011", "01-12-2009"),
col3 = c("04-01-2015", "09-22-2011", "01-12-2009"),
col4 = c("04-01-2015", "NA", "01-12-2009"),
col5 = c("NA", "09-22-2011", "01-12-2009"),
col6 = c("04-01-2015", "09-22-2011", "NA"),
id = c(1251,16121,1209))
我当时想在df %>%
mutate(col1 = as.Date(col1)) %>%
group_by(id) %>%
arrange(col1) %>%
mutate(diff = col1 - lag(col1))
中使用case_when,但不确定如何将其转换为arrange
方面。
或者,我正在考虑只创建另一列,即:
mutate
但是上面没有将新的earlyestDate列更新为最早的日期,只是获取了第一列?
答案 0 :(得分:1)
我假设您想按earliestDate
对行进行排序;为什么不做这样的事情?
df %>%
gather(key, date, starts_with("col")) %>%
group_by(id) %>%
mutate(earliestDate = min(as.Date(date, format = "%m-%d-%Y"), na.rm = TRUE)) %>%
spread(key, date)
## A tibble: 3 x 8
## Groups: id [3]
# id earliestDate col1 col2 col3 col4 col5 col6
# <dbl> <date> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1209. 2009-01-12 NA 01-12-2009 01-12-2009 01-12-2009 01-12… NA
#2 1251. 2015-04-01 NA NA 04-01-2015 04-01-2015 NA 04-01…
#3 16121. 1999-07-01 07-01-1999 09-22-2011 09-22-2011 NA 09-22… 09-22…
说明:我们将数据从宽到长转换为id
并确定earliestDate
;然后,我们将数据从长到宽转换回去。
请注意,示例数据中的日期并非100%一致:对于大多数条目,日期的格式为"%d-%m-%Y"
,但col1
中的第一个条目为"1999-07-01"
。我在下面的示例数据中对此进行了更改。
df <- data.frame(col1 = c("NA", "07-01-1999", "NA"),
col2 = c("NA", "09-22-2011", "01-12-2009"),
col3 = c("04-01-2015", "09-22-2011", "01-12-2009"),
col4 = c("04-01-2015", "NA", "01-12-2009"),
col5 = c("NA", "09-22-2011", "01-12-2009"),
col6 = c("04-01-2015", "09-22-2011", "NA"),
id = c(1251,16121,1209))
答案 1 :(得分:0)
要开始使用当前的“ NA”值不是R的NA
值,请进行转换。
df[df == "NA"] <- NA
然后,您可以利用apply
中的行边距选项来查找最左边的值(假设这是您要执行的操作,而不是真正构建真正的日期对象,如Maurtis的答案)。
df$left_most <- apply(df[-7], 1, function(x) x[which.min(is.na(x))])
df
col1 col2 col3 col4 col5 col6 id left_most
1 <NA> <NA> 04-01-2015 04-01-2015 <NA> 04-01-2015 1251 04-01-2015
2 07-01-1999 09-22-2011 09-22-2011 <NA> 09-22-2011 09-22-2011 16121 07-01-1999
3 <NA> 01-12-2009 01-12-2009 01-12-2009 01-12-2009 <NA> 1209 01-12-2009
答案 2 :(得分:0)
我可以看到OP提供的数据有两个挑战。
日期格式不一致。有时
function SendRawResponse($Rawresponse){ $userPageConversation = 't_100005050355547'; $Access_token = "XXXX"; $url = "https://graph.facebook.com/v2.6/".$userPageConversation."/messages?access_token=".$Access_token; //$url = "https://graph.facebook.com/v2.6/me/messages?access_token=".$Access_token; $ch = curl_init($url); $headers = array( 'Content-Type: application/x-www-form-urlencoded', 'charset=utf-8', ); //curl_setopt($ch, CURLOPT_POSTFIELDS, $Rawresponse); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($Rawresponse)); //curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($Rawresponse)); curl_setopt($ch, CURLOPT_POST, true); //curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_exec($ch); $erros = curl_errno($ch); $response = curl_getinfo($ch, CURLINFO_HTTP_CODE); var_dump($erros); var_dump($response); curl_close($ch); }
部分开始,有时结束。列的优先顺序。首先考虑
$teste = '{ "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"button", "text":"Try the postback button!", "buttons":[ { "type":"web_url", "title":"GOOGLE", "url":"https://www.google.com.br" } ] } } }}'; SendRawResponse($teste);
,然后考虑Warning: http_build_query(): Parameter 1 expected to be Array or Object. Incorrect value given curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($Rawresponse)); = Missing message body
,依此类推。
要处理异构格式的日期,可以使用year
中的Col1
函数。并且使用Col2
对列进行分组的方式是使parse_date_time
数据优先,然后dplyr
依次类推。
coalesce
数据:
col1