Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据R中另一列的顺序创建列_R_Dataframe_Dplyr_Tidyverse_Zoo - Fatal编程技术网

根据R中另一列的顺序创建列

根据R中另一列的顺序创建列,r,dataframe,dplyr,tidyverse,zoo,R,Dataframe,Dplyr,Tidyverse,Zoo,我有一个数据帧,它是这个的一个更长的版本: council_name <- c("Southwark", "Southwark", "Southwark", "Lambeth", "Lambeth", "Lambeth", "Yorkshire", "Yorkshire", "Yorkshire") quarte

我有一个数据帧,它是这个的一个更长的版本:

council_name <- c("Southwark", "Southwark", "Southwark", "Lambeth", "Lambeth", "Lambeth", "Yorkshire", "Yorkshire", "Yorkshire")
quarter <- c("2006 Q1", "2006 Q2", "2006 Q3", "2006 Q1", "2006 Q2", "2006 Q3","2006 Q1", "2006 Q2", "2006 Q3")
treat <- c(1, 0, 1, 0, 0, 1, 0, 0, 0)
df.desired <- as.data.frame(c(council_name, as.yearqtr(quarter), treat, df, first.treatment))
但是得到:

Error: Problem with `mutate()` input `first.treatment`. x unique() applies only to vectors ℹ Input `first.treatment` is `by(year_qtr, head, 1)`. ℹ The error occured in group 1: council_name = "Adur", year_qtr = 2006 Q2.


非常感谢

我确实对示例数据做了一些修改,但我希望如此,这就是你的意思。 我不喜欢返回字符串或
0
的想法。应该始终返回相同的数据类型。这就是为什么我的回答返回
quarter
NA
。如果您坚持返回
0
,则可以使用
is.na
轻松“修复”该问题

council_name <- c("Southwark", "Southwark", "Southwark", "Lambeth", "Lambeth", "Lambeth", "Yorkshire", "Yorkshire", "Yorkshire")
quarter <- c("2006 Q1", "2006 Q2", "2006 Q3", "2006 Q1", "2006 Q2", "2006 Q3","2006 Q1", "2006 Q2", "2006 Q3")
treat <- c(1, 0, 1, 0, 0, 1, 0, 0, 0)
df <- data.frame(council_name, quarter, treat)

treat.one <- function(d){
  line <- which(d$treat == 1)[1]
  return(d$quarter[line])
}

by(df, council_name, treat.one)
返回

> by(df, council_name, treat.one)
council_name: Lambeth
[1] "2006 Q3"
----------------------------------------- 
council_name: Southwark
[1] "2006 Q1"
----------------------------------------- 
council_name: Yorkshire
[1] NA

我确实对示例数据做了一些修改,但我希望如此,这就是你的意思。 我不喜欢返回字符串或
0
的想法。应该始终返回相同的数据类型。这就是为什么我的回答返回
quarter
NA
。如果您坚持返回
0
,则可以使用
is.na
轻松“修复”该问题

council_name <- c("Southwark", "Southwark", "Southwark", "Lambeth", "Lambeth", "Lambeth", "Yorkshire", "Yorkshire", "Yorkshire")
quarter <- c("2006 Q1", "2006 Q2", "2006 Q3", "2006 Q1", "2006 Q2", "2006 Q3","2006 Q1", "2006 Q2", "2006 Q3")
treat <- c(1, 0, 1, 0, 0, 1, 0, 0, 0)
df <- data.frame(council_name, quarter, treat)

treat.one <- function(d){
  line <- which(d$treat == 1)[1]
  return(d$quarter[line])
}

by(df, council_name, treat.one)
返回

> by(df, council_name, treat.one)
council_name: Lambeth
[1] "2006 Q3"
----------------------------------------- 
council_name: Southwark
[1] "2006 Q1"
----------------------------------------- 
council_name: Yorkshire
[1] NA

使用<代码> GROPY由< /代码>时,<代码>突变/<代码>调用将依次考虑所有组中的每个变量。

因此,您可以这样写:

library(zoo)
council_name <- c("Southwark", "Southwark", "Southwark", "Lambeth", "Lambeth", "Lambeth", "Yorkshire", "Yorkshire", "Yorkshire")
quarter <- c("2006 Q1", "2006 Q2", "2006 Q3", "2006 Q1", "2006 Q2", "2006 Q3","2006 Q1", "2006 Q2", "2006 Q3")
treat <- c(1, 0, 1, 0, 0, 1, 0, 0, 0)
first.treatment <- c("2006 Q1", "2006 Q3", 0)
df.desired <- as.data.frame <- c(council_name, as.yearqtr(quarter), treat, df, first.treatment)

tibble(council_name, year_qtr=as.yearqtr(quarter), treat) %>% 
  group_by(council_name) %>% 
  arrange(year_qtr) %>% 
  mutate(first_treatment = year_qtr[treat==1][1]) %>% 
  arrange(council_name, year_qtr)


对于每个组,这需要
year\u qtr
列,其中
treat==1
,并获取结果向量的第一个值。这就是为什么预先排序(<代码>排列< /代码>)的重要性。

当使用<代码> GROPY由 >时,<代码>突变/<代码>调用将依次考虑所有组中的每个变量。

因此,您可以这样写:

library(zoo)
council_name <- c("Southwark", "Southwark", "Southwark", "Lambeth", "Lambeth", "Lambeth", "Yorkshire", "Yorkshire", "Yorkshire")
quarter <- c("2006 Q1", "2006 Q2", "2006 Q3", "2006 Q1", "2006 Q2", "2006 Q3","2006 Q1", "2006 Q2", "2006 Q3")
treat <- c(1, 0, 1, 0, 0, 1, 0, 0, 0)
first.treatment <- c("2006 Q1", "2006 Q3", 0)
df.desired <- as.data.frame <- c(council_name, as.yearqtr(quarter), treat, df, first.treatment)

tibble(council_name, year_qtr=as.yearqtr(quarter), treat) %>% 
  group_by(council_name) %>% 
  arrange(year_qtr) %>% 
  mutate(first_treatment = year_qtr[treat==1][1]) %>% 
  arrange(council_name, year_qtr)


对于每个组,这需要
year\u qtr
列,其中
treat==1
,并获取结果向量的第一个值。这就是为什么事先排序(
排列
)很重要的原因。

“我尝试了与group_by不同的事情”-请分享您的代码,即使它不起作用。您是对的。对不起,我编辑了它并附上了一个例子。你的例子正确吗??因为我在运行它时会得到一个列表,而不是一个数据框对不起,现在更正了“我尝试了与group_by的不同操作”-请共享您的代码,即使它不起作用。您是对的。对不起,我编辑了它并附上了一个例子。你的例子正确吗??因为我运行它时会得到一个列表,而不是一个数据框抱歉,现在更正了