我有一个类似于下表的数据框,用于跟踪某个月访问商店的人。我想创建一个新列Total_Visits,它是特定ID在某个月内访问商店的次数。在下面的示例中,对于日期6-13和ID 23,Total_Visits在任何行中将为3,其中date == 6-13,ID == 23.
Date ID
6-13 23
6-13 34
6-13 23
6-13 23
7-13 23
我正在寻找的数据框架
Date ID Total_Visits
6-13 23 3
6-13 34 1
6-13 23 3
6-13 23 3
7-13 23 1
虽然我假设有一些acast函数来确保我不必遍历这个(30,000行),但如果向量化不起作用,我可以使用循环。
答案 0 :(得分:3)
您可以使用 dplyr
套餐:
library(dplyr)
df %>% group_by(Date, ID) %>% mutate(Total_Visits = n())
# # A tibble: 5 x 3
# # Groups: Date, ID [3]
# Date ID Total_Visits
# <fctr> <int> <int>
# 1 6-13 23 3
# 2 6-13 34 1
# 3 6-13 23 3
# 4 6-13 23 3
# 5 7-13 23 1
在输出上使用data.frame
使其成为数据帧。
或使用 data.table
套餐:
library(data.table)
setDT(df)[, Total_Visits:=.N, by=c("Date","ID")]
df
# Date ID Total_Visits
# 1: 6-13 23 3
# 2: 6-13 34 1
# 3: 6-13 23 3
# 4: 6-13 23 3
# 5: 7-13 23 1
<强> 数据:的强>
df <- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 2L), .Label = c("6-13",
"7-13"), class = "factor"), ID = c(23L, 34L, 23L, 23L, 23L)), .Names = c("Date",
"ID"), class = "data.frame", row.names = c(NA, -5L))
答案 1 :(得分:2)
我喜欢使用library(data.table)
dat = read.table("clipboard", header = TRUE)
setDT(dat)
> dat[ , .(visits = .N), by = .(Date, ID)]
Date ID visits
1: 6-13 23 3
2: 6-13 34 1
3: 7-13 23 1
进行这些操作。它也是最快的解决方案。
$row = mysqli_fetch_array($result);