- 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/
我正在尝试使用以下 keytool 命令为我的应用程序生成 keystore : keytool -genkey -alias tomcat -keystore tomcat.keystore -ke
编辑:在西里尔正确解决问题后,我注意到只需将生成轴的函数放在用于生成标签的函数下面就可以解决问题。 我几乎读完了 O'Reilly 书中关于 D3.js 的教程,并在倒数第二页上制作了散点图,但是当添
虽然使用 GraphiQL 效果很好,但我的老板要求我实现一个用户界面,用户可以在其中通过 UI 元素(例如复选框、映射关系)检查呈现给他们的元素并获取数据,这样做将为该人生成 graphql 输入,
我尝试在 Netbean 6.8 中使用 ws-import 生成 Java 类。我想重新生成 jax-ws,因为在 ebay.api.paypalapi 包中发现了一个错误(我认为该错误是由于 Pa
我有一个 perl 脚本,它获取系统日期并将该日期写入文件名。 系统日期被分配给 TRH1 变量,然后它被设置为一个文件名。 $TRH1 =`date + %Y%m%d%H%M`; print "TR
我是 Haskell 的新手,需要帮助。我正在尝试构建一种必须具有某种唯一性的新数据类型,因此我决定使用 UUID 作为唯一标识符: data MyType = MyType { uuid ::
我制作了一个脚本,它可以根据 Mysql 数据库中的一些表生成 XML。 该脚本在 PHP 中运行。 public function getRawMaterials($apiKey, $format
所以这是我的项目中的一个问题。 In this task, we will use OpenSSL to generate digital signatures. Please prepare a f
我在 SAS LIFEREG 中有一个加速故障时间模型,我想绘制它。因为 SAS 在绘图方面非常糟糕,我想实际重新生成 R 中曲线的数据并将它们绘制在那里。 SAS 提出了一个尺度(在指数分布固定为
我正在为 Django 后端制作一个样板,并且我需要能够使它到达下一个下载它的人显然无法访问我的 secret key 的地方,或者拥有不同的 key 。我一直在研究一些选项,并在这个过程中进行了实验
我正在创建一个生成采购订单的应用程序。我可以根据用户输入的详细信息创建文本文件。我想生成一个看起来比普通文本文件好得多的 Excel。有没有可以在我的应用程序中使用的开源库? 最佳答案 目前还没有任何
我正在尝试使用 ScalaCheck 为 BST 创建一个 Gen,但是当我调用 .sample 方法时,它给了我 java.lang.NullPointerException。我哪里错了? seal
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我尝试编写一些代码,例如(在verilog中): parameter N = 128; if (encoder_in[0] == 1) begin 23 binary_out = 1;
我正忙于在 Grails 项目中进行从 MySQL 到 Postgres 的相当复杂的数据迁移。 我正在使用 GORM 在 PostGres 中生成模式,然后执行 MySQL -> mysqldump
如何使用纯 XSLT 生成 UUID?基本上是寻找一种使用 XSLT 创建独特序列的方法。该序列可以是任意长度。 我正在使用 XSLT 2.0。 最佳答案 这是一个good example 。基本上,
我尝试安装.app文件,但是当我安装并单击“同步”(在iTunes中)时,我开始在设备上开始安装,然后停止,这是一个问题,我不知道在哪里,但我看到了我无法解决的奇怪的事情: 最佳答案 似乎您没有在Xc
自从我生成 JavaDocs 以来已经有一段时间了,我确信这些选项在过去 10 年左右的时间里已经得到了改进。 我能否得到一些有关生成器的建议,该生成器将输出类似于 .Net 文档结构的 JavaDo
我想学习如何生成 PDF,我不想使用任何第三方工具,我想自己用代码创建它。到目前为止,我所看到的唯一示例是我通过在第 3 方 dll 上打开反射器查看的代码,以查看发生了什么。不幸的是,到目前为止我看
我正在从 Epplus 库生成 excel 条形图。 这是我成功生成的。 我的 table 是这样的 Mumbai Delhi Financial D
我是一名优秀的程序员,十分优秀!