- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类型的数据:
Person <- c("A", "B", "C", "D", "E", "E", "F", "G", "H", "I")
MOM <- c( NA, NA, NA, "A", "A", NA, "A", "B", "C", NA)
DAD <- c( NA, NA, NA, "B", "B", NA, "E", "A", "B", NA)
Xv <- 1:10
myd <- data.frame (Person, MOM, DAD, Xv, stringsAsFactors=F)
myd
Person MOM DAD Xv
1 A <NA> <NA> 1
2 B <NA> <NA> 2
3 C <NA> <NA> 3
4 D A B 4
5 E A B 5
6 E <NA> <NA> 6
7 F A E 7
8 G B A 8
9 H C B 9
10 I <NA> <NA> 10
此数据包括 Person 及其 Mom 和 Dad 列。我想为此数据创建家庭组。 NA 是信息缺失。定义了一个具有共同的 MOM 和 DAD 的家庭。创始人是那些同时拥有 NA、family = 0 的人。
这是我能想到的,但对我来说并不完美:
fun <- function(i) {
i1 <- if (is.na(myd[i, 2])) i else match(myd[i, 2], myd[1:i, 2])
i2 <- if (is.na(myd[i, 3])) i else match(myd[i, 3], myd[1:i, 3])
min(i1, i2)
}
myd$family <- as.numeric(factor(sapply(1:nrow(myd), fun)))
Person MOM DAD Xv family
1 A <NA> <NA> 1 1
2 B <NA> <NA> 2 2
3 C <NA> <NA> 3 3
4 D A B 4 4
5 E A B 5 4
6 E <NA> <NA> 6 5
7 F A E 7 4
8 G B A 8 6
9 H C B 9 4
10 I <NA> <NA> 10 7
上述功能在某种意义上是不完善的:家庭数据不包括 parent 的数据,例如家庭4应该包括A 和 B 的数据。因此完整的家庭看起来像:
1 A <NA> <NA> 1 1
2 B <NA> <NA> 2 2
4 D A B 4 4
5 E A B 5 4
另一件事(至少对我来说是这样),DAD = A 和 MOM = B 与 DAD = B 和 MOM = A 相同。因此,家庭 4 和 6 是同一个 parent A 和 B 的产物,所以应该相同的。
4 D A B 4 4
5 E A B 5 4
8 G B A 8 6
因此预期的输出是:
Person MOM DAD Xv family
# founders
1 A <NA> <NA> 1 0
2 B <NA> <NA> 2 0
3 C <NA> <NA> 3 0
10 I <NA> <NA> 10 0
6 E <NA> <NA> 6 0
# Family 1
1 A <NA> <NA> 1 1
2 B <NA> <NA> 2 1
4 D A B 4 1
5 E A B 5 1
8 G B A 8 1
# Family 2
1 A <NA> <NA> 1 2
6 E <NA> <NA> 6 2
7 F A E 7 2
# Family 3
2 B <NA> <NA> 2 3
3 C <NA> <NA> 3 3
9 H C B 9 3
编辑:
遗憾的是(好!)在人类遗传学中,我们需要研究类似的变量——家庭、三重奏、妈妈( parent 1、母亲、女性)、父亲(爸爸、 parent 2、男性)、个体/受试者等。这使得一切相似,问题相似。
Family vs Trio
1 Nuclear family
A x B
|
C D E
Trio -> 3 trios
A x B A x B A x B
| | |
C D E
发问者的编辑:我同意以下评论作为作业,请暂时不要回答问题(您认为足够好的时间,作业提交时间已经过去)。如果我得到答复,我会稍后发布(3 个月左右)。
编辑
创始人定义 - 那些 parent 双方都不知道他们是否是儿子/女儿的人,所以他们在 MOM 和 DAD 列中都有。这些被认为是家庭 0,因为它们是其他家庭的一部分,但列表不是真正的家庭。
Person MOM DAD Xv family
1 A <NA> <NA> 1 0
2 B <NA> <NA> 2 0
3 C <NA> <NA> 3 0
10 I <NA> <NA> 10 0
6 E <NA> <NA> 6 0
** 家庭定义* 一个家庭由 parent (妈妈和爸爸)和所有儿子和女儿组成。如果 Person DAD 和 MOM 与 Another Person DAD 和 MOM 匹配,则应将他们视为一个家庭。例如下面列表中的D和E人,MOM=A,DAD=B,这两个人连同D、E组成一个家庭。现在我们需要从创始人列表(家庭 0)中为他们的 parent (A 和 B)回收数据。
# Family 1
Person MOM DAD Xv family
1 A <NA> <NA> 1 1
2 B <NA> <NA> 2 1
4 D A B 4 1
5 E A B 5 1
同样与人类情况相反,这里的个体可以是 MOM 或 DAD(可以转换性别),因此 A(MOM)和 B(DAD)产生的后代与 B(MOM)和 A 产生的后代相同(DAD),因此我们需要将以下内容添加到 individual to family 1 列表中。
Person MOM DAD Xv family
8 G B A 8 1
因此家庭 1 的完整列表变为:
Person MOM DAD Xv family
1 A <NA> <NA> 1 1
2 B <NA> <NA> 2 1
4 D A B 4 1
5 E A B 5 1
8 G B A 8 1
家庭 1 可以图示为:
MOM x DAD MOM x DAD
A | B or B | A
----------------- ------
| | |
D E G
这是部分解决方案:
myd1 <- data.frame(myd$DAD, myd$MOM)
myd$family<-as.factor(apply(myd1,1,function(x){paste(x[order(x)],collapse='-')}))
Person MOM DAD Xv family
1 A <NA> <NA> 1 NA-NA
2 B <NA> <NA> 2 NA-NA
3 C <NA> <NA> 3 NA-NA
4 D A B 4 A-B
5 E A B 5 A-B
6 E <NA> <NA> 6 NA-NA
7 F A E 7 A-E
8 G B A 8 A-B
9 H C B 9 B-C
10 I <NA> <NA> 10 NA-NA
它不提供家族编号,而是 A 和 B 的家族。NA-NA 是创始人,它在崩溃前下令,因此 A-B 变成 B-A。
剩下的问题是 A-B 家庭需要回收人员 A 和 B 的数据(尽管他们在家庭 NA-NA 组中)。
Person MOM DAD Xv family
1 A <NA> <NA> 1 NA-NA
2 B <NA> <NA> 2 NA-NA
4 D A B 4 A-B
5 E A B 5 A-B
最佳答案
我不确定您是否已经解决了这个问题,但这是一个解决方案。
首先,您的数据:
# Your data
myd <- data.frame(Person = c("A", "B", "C", "D", "E",
"E", "F", "G", "H", "I"),
MOM = c(NA, NA, NA, "A", "A", NA, "A", "B", "C", NA),
DAD = c(NA, NA, NA, "B", "B", NA, "E", "A", "B", NA),
Xv = 1:10, stringsAsFactors=F)
其次,我们通过将原始数据中的第 2 列和第 3 列合并在一起来识别家族。我们将使用它来拆分
您的 data.frame
到一个列表中。
# Identifying the families
fam = apply(myd[2:3], 1, function(x) paste0(sort(x), collapse=" "))
第三,我们将data.frame
拆分成一个列表。在这种情况下,我们最终得到一个包含四个 data.frame
的列表:一个用于创始人,一个用于每个家族。
# Splitting the data by founders and families
temp_1 = split(myd, fam)
names(temp_1)[1] = "Founders"
第四,我们进行一些简单的匹配和子集化,以确定哪些创始人属于哪些家族。
# Identify which families the founders belong to
temp_2 = lapply(1:length(temp_1),
function(x) temp_1[[1]][which(temp_1[[1]]$Person %in%
unique(unlist(temp_1[[x]][,c(2,3)], use.names=FALSE))),])
最后,我们将这些数据rbind
在一起。
# "Merging" (with rbind) founders and their families
OUT = lapply(1:length(temp_1), function(x) rbind(temp_2[[x]], temp_1[[x]]))
names(OUT) = names(temp_1)
这是输出:
OUT
# $Founders
# Person MOM DAD Xv
# 1 A <NA> <NA> 1
# 2 B <NA> <NA> 2
# 3 C <NA> <NA> 3
# 6 E <NA> <NA> 6
# 10 I <NA> <NA> 10
#
# $`A B`
# Person MOM DAD Xv
# 1 A <NA> <NA> 1
# 2 B <NA> <NA> 2
# 4 D A B 4
# 5 E A B 5
# 8 G B A 8
#
# $`A E`
# Person MOM DAD Xv
# 1 A <NA> <NA> 1
# 6 E <NA> <NA> 6
# 7 F A E 7
#
# $`B C`
# Person MOM DAD Xv
# 2 B <NA> <NA> 2
# 3 C <NA> <NA> 3
# 9 H C B 9
如果您更喜欢 data.frame
而不是 list
,您可以在完成前面的步骤后执行以下操作:
OUT = do.call("rbind",
lapply(1:length(OUT),
function(x) cbind(OUT[[x]], fam = names(OUT[x]))))
OUT
# Person MOM DAD Xv fam
# 1 A <NA> <NA> 1 Founders
# 2 B <NA> <NA> 2 Founders
# 3 C <NA> <NA> 3 Founders
# 6 E <NA> <NA> 6 Founders
# 10 I <NA> <NA> 10 Founders
# 11 A <NA> <NA> 1 A B
# 21 B <NA> <NA> 2 A B
# 4 D A B 4 A B
# 5 E A B 5 A B
# 8 G B A 8 A B
# 12 A <NA> <NA> 1 A E
# 61 E <NA> <NA> 6 A E
# 7 F A E 7 A E
# 22 B <NA> <NA> 2 B C
# 31 C <NA> <NA> 3 B C
# 9 H C B 9 B C
关于r - 在 R 中生成组(家庭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11515970/
我正在从 Stata 迁移到 R(plm 包),以便进行面板模型计量经济学。在 Stata 中,面板模型(例如随机效应)通常报告组内、组间和整体 R 平方。 I have found plm 随机效应
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我想要求用户输入整数值列表。用户可以输入单个值或一组多个值,如 1 2 3(spcae 或逗号分隔)然后使用输入的数据进行进一步计算。 我正在使用下面的代码 EXP <- as.integer(rea
当 R 使用分类变量执行回归时,它实际上是虚拟编码。也就是说,省略了一个级别作为基础或引用,并且回归公式包括所有其他级别的虚拟变量。但是,R 选择了哪一个作为引用,以及我如何影响这个选择? 具有四个级
这个问题基本上是我之前问过的问题的延伸:How to only print (adjusted) R-squared of regression model? 我想建立一个线性回归模型来预测具有 15
我在一台安装了多个软件包的 Linux 计算机上安装了 R。现在我正在另一台 Linux 计算机上设置 R。从他们的存储库安装 R 很容易,但我将不得不使用 安装许多包 install.package
我正在阅读 Hadley 的高级 R 编程,当它讨论字符的内存大小时,它说: R has a global string pool. This means that each unique strin
我们可以将 Shiny 代码写在两个单独的文件中,"ui.R"和 "server.R" , 或者我们可以将两个模块写入一个文件 "app.R"并调用函数shinyApp() 这两种方法中的任何一种在性
我正在使用 R 通过 RGP 包进行遗传编程。环境创造了解决问题的功能。我想将这些函数保存在它们自己的 .R 源文件中。我这辈子都想不通怎么办。我尝试过的一种方法是: bf_str = print(b
假设我创建了一个函数“function.r”,在编辑该函数后我必须通过 source('function.r') 重新加载到我的全局环境中。无论如何,每次我进行编辑时,我是否可以避免将其重新加载到我的
例如,test.R 是一个单行文件: $ cat test.R # print('Hello, world!') 我们可以通过Rscript test.R 或R CMD BATCH test.R 来
我知道我可以使用 Rmd 来构建包插图,但想知道是否可以更具体地使用 R Notebooks 来制作包插图。如果是这样,我需要将 R Notebooks 编写为包小插图有什么不同吗?我正在使用最新版本
我正在考虑使用 R 包的共享库进行 R 的站点安装。 多台计算机将访问该库,以便每个人共享相同的设置。 问题是我注意到有时您无法更新包,因为另一个 R 实例正在锁定库。我不能要求每个人都关闭它的 R
我知道如何从命令行启动 R 并执行表达式(例如, R -e 'print("hello")' )或从文件中获取输入(例如, R -f filename.r )。但是,在这两种情况下,R 都会运行文件中
我正在尝试使我当前的项目可重现,因此我正在创建一个主文档(最终是一个 .rmd 文件),用于调用和执行其他几个文档。这样我自己和其他调查员只需要打开和运行一个文件。 当前设置分为三层:主文件、2 个读
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我的 R 包中有以下描述文件 Package: blah Title: What the Package Does (one line, title case) Version: 0.0.0.9000
有没有办法更有效地编写以下语句?accel 是一个数据框。 accel[[2]]<- accel[[2]]-weighted.mean(accel[[2]]) accel[[3]]<- accel[[
例如,在尝试安装 R 包时 curl作为 usethis 的依赖项: * installing *source* package ‘curl’ ... ** package ‘curl’ succes
我想将一些软件作为一个包共享,但我的一些脚本似乎并不能很自然地作为函数运行。例如,考虑以下代码块,其中“raw.df”是一个包含离散和连续类型变量的数据框。函数“count.unique”和“squa
我是一名优秀的程序员,十分优秀!