gpt4 book ai didi

function - 对 R 中的每一行执行 if 语句

转载 作者:行者123 更新时间:2023-12-03 15:07:18 25 4
gpt4 key购买 nike

我正在将一个 csv 文件读入 R 中,如下所示:

3,3
3,2
3,3
3,3
3,3
3,3
2,3
1,2
2,2
3,3

我想为我的数据可能存在的 9 种独特可能性中的每一种都分配一个数字(3 和 3 是 9,3 和 2 是 8,2 和 3 是 6,等等)。我一直在尝试设计一个嵌套的 if 语句,该语句将评估每一行,在第三列中分配一个数字,并对数据集中的每一行执行此操作。我相信这可以通过 apply 函数来完成,但我无法让 if 语句在 apply 函数中工作。这两列都有可能的值 1,2 或 3。这是我到目前为止的代码,只是尝试将 9 分配给 3/3 列,将 0 分配给其他所有内容:
#RScript for haplotype analysis

#remove(list=ls())
options(stringsAsFactors=FALSE)
setwd("C:/Documents and Settings/ColumbiaPC/Desktop")

#read in comma-delimited, ID-matched genotype data
OXT <- read.csv("OXTRhaplotype.csv")
colnames(OXT)<- c("OXT1","OXT2")

OXT$HAP <- apply(OXT, 1, function(x) if(x[1]=="3"&&x[2]=="3")x[3]=="9" else 0))

提前感谢您的任何帮助。

最佳答案

您可以使用矩阵和标准 R 子集解决您描述的问题,无需任何 if声明

m <- matrix(1:9, nrow=3, byrow=TRUE)
m

[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9

这意味着您可以使用矩阵子集对 m 进行索引:
m[3, 2]
[1] 8

m[3,3]
[1] 9

m[2,3]
[1] 6

现在您可以将其应用于您的数据:
df <- structure(list(V1 = c(3L, 3L, 3L, 3L, 3L, 3L, 2L, 1L, 2L, 3L), 
V2 = c(3L, 2L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 3L)), .Names = c("V1",
"V2"), class = "data.frame", row.names = c(NA, -10L))

#df$m <- sapply(seq_len(nrow(df)), function(i)m[df$V1[i], df$V2[i]])
df$m <- m[as.matrix(df)] # Use matrix subsetting, suggested by @Aaron
df

V1 V2 m
1 3 3 9
2 3 2 8
3 3 3 9
4 3 3 9
5 3 3 9
6 3 3 9
7 2 3 6
8 1 2 2
9 2 2 5
10 3 3 9

关于function - 对 R 中的每一行执行 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com