我有一个大型数据集,其中包含 40 年来不定期采样的站点。我想选择共享的最大站点数,让\xe2\x80\x99s 说,至少 5 年的数据。
\n任何指示将不胜感激。
\nHere\xe2\x80\x99s 是一个示例数据集:
\nlibrary(tidyverse)\n\nset.seed(123)\n\nDF <- tibble(\n Sites = 1:100,\n NYears = rbinom(100, 40, .2)\n ) %>%\n rowwise() %>%\n mutate(Years = list(sample(1982:2021, NYears))) %>%\n unnest(Years) %>%\n select(-NYears)\nRun Code Online (Sandbox Code Playgroud)\n 令人遗憾的是,如此多的伟大国家(例如印度)和球员(例如莫·萨拉赫)可能永远不会参加国际足联(足球/足球)世界杯(同样的论点也适用于由少数统治者主导的其他体育赛事)队,例如国际板球和篮球锦标赛)。
尝试创建一个更加平衡的赛事,同时仍然保留基于位置的元素,每个团队具有(大致)相似的实力,并且所有玩家都来自连续区域(最好是同一块土地,但显然不可能在所有情况下都可行,并且超出了这个问题的范围)。
例如,在较弱的地区,可能他们的球队会跨越多个国家(例如,可能是南亚球队),而对于强国,可能会有多个球队(例如,一支只有来自郊区的球员的球队)巴黎)。
然后我可以绘制这些区域,也许使用 Voronois。
我设法通过(《足球经理》和《转会市场》的抓取)收集了相关信息,但我对如何设计选择球队的算法感到困惑。
有大量坐标,对应玩家的出生地。这些地方都有玩家,并且玩家都有评分(从 1 - 100)和位置。
任务是,给定一定的球队规模 (11) 和一定数量的球队(在下面的示例中为 10),以及每个位置所需的一定数量的球员(1,尽管替补球员会很方便),将将区域划分为连续的区域,其中由给定区域的玩家组成的最佳团队与其他区域的团队大致具有相同的技能。
我已经阅读了一些有关图论的内容,但我不确定从哪里开始创建解决这个问题的程序。
我正在寻找一些关于这方面的指导,并且(如果可能的话),如果你可以用玩具示例创建一些东西,那就太棒了!
另外,如果解决整体问题太困难,如果您能找到一种方法来缩小问题范围,并且可以创建一些解决较小问题的方法,然后可以将其推广到更大的问题,那就太好了。
set.seed(0)
library(tidyverse)
df <- tibble(
# generate random latitudes and longitudes, and the number of players for that location
lat = runif(100, 0, 90),
lon = runif(100, 0, 180),
players = rnorm(100, 0, 5) |> abs() |> ceiling() |> as.integer()
)
num_positions <- 11
position <- letters[1:num_positions]
df <- df …Run Code Online (Sandbox Code Playgroud) 就像这张海报一样,我试图在 r 中制作一个表格,在其中按因素的级别进行分组。我很高兴在 gt 或 kabbleExtra 或任何其他使这样的图表成为可能的包中执行此操作。
我想进一步使用第一篇文章中的图表来添加第二组分组,几乎与此处所做的完全一样:
我遵循了另一篇文章中的建议,但这给我留下了一个翻转的表格,并且行没有正确分段(我有男性和女性的列,年龄组的每个变量有三行,但变量有名称相同,因此很难判断哪个是哪个年龄段的)。
#Desired output:
# age_y age_m age_o
# Count Percent | Count Percent | Count Percent
#VARIABLE 1
# Male 45 45% 76 56% 43 89%
# Female 23 65% 11 88% 46 91%
#VARIABLE 2
# Male 45 45% 76 56% 43 89%
# Female 23 65% 11 88% 46 91%
#VARIABLE 3
# Male 45 45% 76 56% 43 89%
# Female 23 65% 11 88% 46 91% …Run Code Online (Sandbox Code Playgroud) 考虑以下示例数据:
groups a b
1 A 1 1
2 A 2 1
3 A 3 1
4 B 4 2
5 B 5 2
6 B 6 2
7 C 7 3
8 C 8 3
9 C 9 3
df <- data.frame(groups = rep(c("A", "B", "C"), each = 3),
a = 1:9,
b = rep(1:3, each = 3))
Run Code Online (Sandbox Code Playgroud)
我希望执行以下操作,但使用除外colSums:
library(dplyr)
df %>% summarise(min_group = min(c(sum(a), sum(b))), .by = groups)
# Output:
groups min_group
1 A 3
2 …Run Code Online (Sandbox Code Playgroud) 我有sampledata使用下面的代码复制的数据:
###producing sample data
sampledatain1 <- data.frame(in_1=c(1,2,3,4,5),in_2=c("A","B","C","D","E"),stringsAsFactors = F)
sampledatain2 <- data.frame(in_1=c(6,7,8,9,10),in_2=c("F","G","H","I","J"),stringsAsFactors = F)
sampledatain3 <- data.frame(in_1=c(99,98,97,96,95),in_2=c("Z","Y","X","W","V"),stringsAsFactors = F)
sampledata <- data.frame(row = 1:3,
colmerge1 = c("MA","MB","MC"),
colmerge2 = -99:-97,
stringsAsFactors = FALSE)
sampledata$df <- list(sampledatain1,sampledatain2,sampledatain3)
Run Code Online (Sandbox Code Playgroud)
我想展平所有嵌套的数据框并将它们组合起来,结果如下desired_data:
###reproducing desired data
library(data.table)
sampledatain1$row <- 1
sampledatain1$colmerge1 <- "MA"
sampledatain1$colmerge2 <- -99
sampledatain2$row <- 2
sampledatain2$colmerge1 <- "MB"
sampledatain2$colmerge2 <- -98
sampledatain3$row <- 3
sampledatain3$colmerge1 <- "MC"
sampledatain3$colmerge2 <- -97
desired_data <- rbindlist(list(sampledatain1,sampledatain2,sampledatain3))
Run Code Online (Sandbox Code Playgroud)
如何使用函数从样本数据生成desired_data来做到这一点?
.keep = "unused"在 R 的 dplyr 包中,使用该函数创建新列时有一个选项mutate()(相当于assign)。
给没用过的人举个例子:
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
# any column used in creating `new_col` is dropped afterwards automatically
> mutate(.data = head(iris), new_col = Sepal.Length + Petal.Length * Petal.Width, .keep = …Run Code Online (Sandbox Code Playgroud) 我正在尝试向数据集添加索引,该数据集太大而无法容纳在 RAM 中。添加索引的 tidyverse 方法是:
library(tidyverse)
df = mtcars
df |>
mutate(row_id = 1:nrow(cyl)) # any column name in the df
Run Code Online (Sandbox Code Playgroud)
Arrow 的 Dplyr 后端不允许执行此操作。我还能怎样做呢?
考虑这个例子:
library(dplyr)
df <- data.frame(a=1:5,b=6:10)
> df
a b
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
Run Code Online (Sandbox Code Playgroud)
colname <- "a"
df |> filter(!!as.symbol(colname)<3)
a b
1 1 6
2 2 7
Run Code Online (Sandbox Code Playgroud)
df |> filter(!!colname<3)
[1] a b
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)
!!应用于字符串而不是符号会实现什么效果,为什么它会返回空数据帧而不是错误?
该函数的文档*apply()指出:
vapply与 类似sapply,但具有预先指定的返回值类型,因此使用起来更安全(有时更快)。[强调我的。]
这对我来说是有道理的,为什么它会更快 - 浪费更少的时间检查类型 - 但是,考虑到他们可以说“与”vapply()一样快或更快sapply(),但选择不这样做,我解释了他们的选择有时比他们更快潜在的意思是“对于大多数任务来说vapply(),平均速度更快,但在某些情况下,平均速度可能相同,或者在其他情况下甚至更慢” ——这对我来说似乎很奇怪。为什么它会变慢?高级 R状态 '比'vapply()更快sapply(),相比之下,这是相当明确的。
我是否误解了这一点,或者是否存在vapply()比 慢的情况sapply(),如果是的话,它们是什么?
例如,其基本原理可能是由于垃圾收集的差异,或者处理某些类型的速度,或者分配内存或其他东西(这些都是疯狂的猜测)。
令人惊讶的是,我在 StackOverflow 或其他地方找不到在线解决此问题的方法。有很多问题涉及 vapply及其安全性。在一些 比较中,虽然vapply()与 一样快或更快sapply(),但有许多迭代比最慢的vapply()迭代更快(其中一个迭代比或apply()快得多。长话短说,我有点迷失了!lapply()vapply()
您能提供的任何帮助将不胜感激!
我有一个 1666 行的数据框。我想添加一个具有重复序列的列,1:5以用于cut()进行交叉验证。它看起来像这样:
Y x1 x2 Id1
1 .15 3.6 1
0 1.1 2.2 2
0 .05 3.3 3
0 .45 2.8 4
1 .85 3.1 5
1 1.01 2.9 1
... ... ... ...
Run Code Online (Sandbox Code Playgroud)