基于另一列的值和频率(以R为单位),使用dplyr创建列
当我想到一个更好的标题时,我将很快编辑帖子名称,但目前,下面的一个简短示例突出了我正在努力解决的问题:基于另一列的值和频率(以R为单位),使用dplyr创建列,r,dplyr,data-manipulation,R,Dplyr,Data Manipulation,当我想到一个更好的标题时,我将很快编辑帖子名称,但目前,下面的一个简短示例突出了我正在努力解决的问题: dput(mydf) structure(list(gameID = c("34", "34", "34", "34", "34", "25", "25", "25")), class = "data.frame", row.names = c(NA, -8L)) mydf gameID 1 34 2 34 3 34 4 34 5 34 6
dput(mydf)
structure(list(gameID = c("34", "34", "34", "34", "34", "25",
"25", "25")), class = "data.frame", row.names = c(NA, -8L))
mydf
gameID
1 34
2 34
3 34
4 34
5 34
6 25
7 25
8 25
(包含garbocCol只是为了使dataframe的列数大于1,否则请忽略。)这感觉应该是一个相当简单的数据操作问题。我想创建一个新列,它只是粘贴了gameID计数的gameID列。因此,我寻求以下产出:
mydf
gameID newCol
1 34 34-1
2 34 34-2
3 34 34-3
4 34 34-4
5 34 34-5
6 25 25-1
7 25 25-2
8 25 25-3
gameID列已经是一个字符,而newCol最好也是字符类型。我在一个长的ish dplyr链中工作,并试图使以下各项正常工作:
mydf <- mydf %>%
dplyr::mutate(newCol = paste0(gameID, '-', {what goes here}))
mydf%
dplyr::mutate(newCol=paste0(gameID,'-',{这里发生了什么}))
我可以很容易地使用for循环来实现这一点,但是dplyr解决方案会更好。如果我们需要使用sequence
粘贴
,请使用行号()获取序列。
按“gameID”和粘贴
分组以创建“newCol”
mydf %>%
group_by(gameID) %>%
mutate(newCol = paste(gameID, row_number(), sep = '-'))
# A tibble: 8 x 3
# Groups: gameID [2]
# gameID garboCol newCol
# <fct> <dbl> <chr>
#1 34 1 34-1
#2 34 2 34-2
#3 34 3 34-3
#4 34 4 34-4
#5 34 5 34-5
#6 25 6 25-1
#7 25 7 25-2
#8 25 8 25-3
或与胶水一起使用(从胶水)
如果我们需要使用sequence粘贴
,请使用按“gameID”分组的行编号()获取序列,然后使用粘贴
创建“newCol”
mydf %>%
group_by(gameID) %>%
mutate(newCol = paste(gameID, row_number(), sep = '-'))
# A tibble: 8 x 3
# Groups: gameID [2]
# gameID garboCol newCol
# <fct> <dbl> <chr>
#1 34 1 34-1
#2 34 2 34-2
#3 34 3 34-3
#4 34 4 34-4
#5 34 5 34-5
#6 25 6 25-1
#7 25 7 25-2
#8 25 8 25-3
或与胶水一起使用(从胶水)
这可能就是你的想法
mydf %>%
group_by(gameID) %>%
dplyr::mutate(newCol = paste0(gameID, '-', seq_along(gameID)))
# A tibble: 8 x 3
# Groups: gameID [2]
# gameID garboCol newCol
# <fct> <dbl> <chr>
#1 34 1 34-1
#2 34 2 34-2
#3 34 3 34-3
#4 34 4 34-4
#5 34 5 34-5
#6 25 6 25-1
#7 25 7 25-2
#8 25 8 25-3
mydf%>%
组别依据(配子ID)%>%
dplyr::mutate(newCol=paste0(gameID,'-',seq_沿(gameID)))
#一个tibble:8x3
#组:gameID[2]
#配子甘草
#
#1 34 1 34-1
#2 34 2 34-2
#3 34 3 34-3
#4 34 4 34-4
#5 34 5 34-5
#6 25 6 25-1
#7 25 7 25-2
#8 25 8 25-3
这可能就是您的想法
mydf %>%
group_by(gameID) %>%
dplyr::mutate(newCol = paste0(gameID, '-', seq_along(gameID)))
# A tibble: 8 x 3
# Groups: gameID [2]
# gameID garboCol newCol
# <fct> <dbl> <chr>
#1 34 1 34-1
#2 34 2 34-2
#3 34 3 34-3
#4 34 4 34-4
#5 34 5 34-5
#6 25 6 25-1
#7 25 7 25-2
#8 25 8 25-3
mydf%>%
组别依据(配子ID)%>%
dplyr::mutate(newCol=paste0(gameID,'-',seq_沿(gameID)))
#一个tibble:8x3
#组:gameID[2]
#配子甘草
#
#1 34 1 34-1
#2 34 2 34-2
#3 34 3 34-3
#4 34 4 34-4
#5 34 5 34-5
#6 25 6 25-1
#7 25 7 25-2
#8 25 8 25-3
我应该删除garbocol,这会让帖子更混乱我应该删除garbocol,这会让帖子更混乱你认为这可以在没有分组的情况下完成吗?如果不是这样的话,但是group_by有一个意想不到的结果,就是转换成一个tibble,这就是将很多字符类转换成int(即使它们应该仍然是字符类型),实际上最后的注释是一个谎言-我在代码中进一步处理列类类型,所以是okay@Canovice您可以使用data.table
中的rowid
。i、 e.mydf%>%变异(newCol=paste(gameID,rowid(gameID),sep='-'))
你认为这可以在没有分组的情况下通过“ing”完成吗?如果不是这样的话,但是group_by有一个意想不到的结果,就是转换成一个tibble,这就是将很多字符类转换成int(即使它们应该仍然是字符类型),实际上最后的注释是一个谎言-我在代码中进一步处理列类类型,所以是okay@Canovice您可以使用data.table
中的rowid
。i、 e.mydf%>%突变(newCol=paste(gameID,rowid(gameID),sep='-')