这是我第一次在这里发帖,我是R的新手,所以希望我正确地提出我的问题。我正在尝试根据另外两个变量在Name
中创建一个新变量Day
和dataset
)。我的数据如下所示:
ID Name Day
1 Abbey 06-Jan-2009
2 Abbey 07-Jan-2009
3 Abbey 06-Jan-2009
4 Abbey 07-Jan-2009
5 Fred 09-Jan-2009
6 Fred 10-Jan-2009
7 Fred 09-Jan-2009
8 Fred 10-Jan-2009
我希望新变量看起来像这样:
ID Name Day Time
1 Abbey 06-Jan-2009 1
2 Abbey 07-Jan-2009 2
3 Abbey 06-Jan-2009 1
4 Abbey 07-Jan-2009 2
5 Fred 09-Jan-2009 1
6 Fred 10-Jan-2009 2
7 Fred 09-Jan-2009 1
8 Fred 10-Jan-2009 2
我试过了:
dataset$Time<-as.numeric (as.factor(dataset$Name),(as.factor(dataset$Day)))
但是,对于每个变量,这并不会将时间重新设置为1。提前谢谢!
答案 0 :(得分:2)
尝试:
transform(dataset, Time=c(ave(as.character(Day), Name, FUN=factor)))
您可能需要也可能不需要as.character
,具体取决于您的数据是以字符还是因素开头。请注意,我们使用c
来删除因子属性。
答案 1 :(得分:2)
使用data.table
library(data.table)#data.table_1.9.5
setDT(df1)[, id:=frank(Day, ties.method='dense'),.(Name)][]
# ID Name Day id
#1: 1 Abbey 06-Jan-2009 1
#2: 2 Abbey 07-Jan-2009 2
#3: 3 Abbey 06-Jan-2009 1
#4: 4 Abbey 07-Jan-2009 2
#5: 5 Fred 09-Jan-2009 1
#6: 6 Fred 10-Jan-2009 2
#7: 7 Fred 09-Jan-2009 1
#8: 8 Fred 10-Jan-2009 2
答案 2 :(得分:0)
我认为使用dplyr
包
dd<-data.frame(
ID=1:8,
Name=c("Abbey", "Abbey", "Abbey", "Abbey", "Fred", "Fred", "Fred", "Fred"),
Day=c("06-Jan-2009", "07-Jan-2009", "06-Jan-2009", "07-Jan-2009", "09-Jan-2009", "10-Jan-2009", "09-Jan-2009", "10-Jan-2009")
)
library(dplyr)
dd %>% group_by(Name) %>% mutate(id=as.numeric(factor(Day)))
# ID Name Day id
# 1 1 Abbey 06-Jan-2009 1
# 2 2 Abbey 07-Jan-2009 2
# 3 3 Abbey 06-Jan-2009 1
# 4 4 Abbey 07-Jan-2009 2
# 5 5 Fred 09-Jan-2009 1
# 6 6 Fred 10-Jan-2009 2
# 7 7 Fred 09-Jan-2009 1
# 8 8 Fred 10-Jan-2009 2
答案 3 :(得分:0)
我的回答与MrFlick相似。注意日期 - 它们可以是日期或字符格式......
# Uncomment if dplyr not installed
# install.packages(dplyr)
library(dplyr)
ID <- 1:8
Name <- rep(c("Abbey", "Fred"), times=c(4,4))
Day <- c("06-Jan-2009", "07-Jan-2009","06-Jan-2009", "07-Jan-2009",
"09-Jan-2009", "10-Jan-2009","09-Jan-2009", "10-Jan-2009")
dataset <- data.frame(ID, Name, Day)
dataset <-
group_by(dataset, Name) %>%
mutate(Time = as.numeric(as.factor((as.Date(Day, "%d-%b-%Y")))))