R中单个IF循环中的多个then条件
我对R很陌生,有一些工作经验,但不是很流利。 我最近在一个大数据集上开发了一个数据集,并使用了R3.3.1。 在数据框(X)中,有一列为标志类型,两列为数字类型,即高度和重量 这些值类似于:R中单个IF循环中的多个then条件,r,R,我对R很陌生,有一些工作经验,但不是很流利。 我最近在一个大数据集上开发了一个数据集,并使用了R3.3.1。 在数据框(X)中,有一列为标志类型,两列为数字类型,即高度和重量 这些值类似于: h w hw_flag 5.874 60.5478 0 4.874 40.5478 0 3.874 10.5478 1 2.999 6.5478 1 8.874 90.5478 0 5.111 50.5478 1 6.554
h w hw_flag
5.874 60.5478 0
4.874 40.5478 0
3.874 10.5478 1
2.999 6.5478 1
8.874 90.5478 0
5.111 50.5478 1
6.554 65.5478 0
我已将两个新列初始化为h_1和w_1到0
X$h_1 <- 0
X$w_1 <- 0
X$h_1不需要循环。只需找到hw_标志
等于1的位置,复制数据,然后用零覆盖h
和w
xy <- read.table(text = "h w hw_flag
5.874 60.5478 0
4.874 40.5478 0
3.874 10.5478 1
2.999 6.5478 1
8.874 90.5478 0
5.111 50.5478 1
6.554 65.5478 0", header = TRUE)
xy$h_1 <- 0
xy$w_1 <- 0
hwflag1 <- xy$hw_flag == 1
xy[hwflag1, c("h_1", "w_1")] <- xy[hwflag1, c("h", "w")]
xy[hwflag1, c("h", "w")] <- 0
h w hw_flag h_1 w_1
1 5.874 60.5478 0 0.000 0.0000
2 4.874 40.5478 0 0.000 0.0000
3 0.000 0.0000 1 3.874 10.5478
4 0.000 0.0000 1 2.999 6.5478
5 8.874 90.5478 0 0.000 0.0000
6 0.000 0.0000 1 5.111 50.5478
7 6.554 65.5478 0 0.000 0.0000
xy不需要循环。只需找到hw_标志
等于1的位置,复制数据,然后用零覆盖h
和w
xy <- read.table(text = "h w hw_flag
5.874 60.5478 0
4.874 40.5478 0
3.874 10.5478 1
2.999 6.5478 1
8.874 90.5478 0
5.111 50.5478 1
6.554 65.5478 0", header = TRUE)
xy$h_1 <- 0
xy$w_1 <- 0
hwflag1 <- xy$hw_flag == 1
xy[hwflag1, c("h_1", "w_1")] <- xy[hwflag1, c("h", "w")]
xy[hwflag1, c("h", "w")] <- 0
h w hw_flag h_1 w_1
1 5.874 60.5478 0 0.000 0.0000
2 4.874 40.5478 0 0.000 0.0000
3 0.000 0.0000 1 3.874 10.5478
4 0.000 0.0000 1 2.999 6.5478
5 8.874 90.5478 0 0.000 0.0000
6 0.000 0.0000 1 5.111 50.5478
7 6.554 65.5478 0 0.000 0.0000
xy要运行的命令实际上应该包含在大括号中:
for(i in 1:nrow(X)) {
if(X$hw_flag[i] == '1') {
X$h_1[i] <- X$h[i]
X$w_1[i] <- X$w[i]
X$h[i] <- 0
X$w[i] <- 0
}
}
for(i in 1:nrow(X)){
如果(X$hw_标志[i]='1'){
X$h_1[i]要运行的命令实际上应该包含在大括号中:
for(i in 1:nrow(X)) {
if(X$hw_flag[i] == '1') {
X$h_1[i] <- X$h[i]
X$w_1[i] <- X$w[i]
X$h[i] <- 0
X$w[i] <- 0
}
}
for(i in 1:nrow(X)){
如果(X$hw_标志[i]='1'){
X$h_1[i]尝试将if
语句运行的命令用大括号括起来,方法与对for
循环所做的相同。您不需要在R中使用;
。谢谢@rosscova,我不知怎么错过了这些大括号。尝试将if
语句运行的命令用大括号括起来,方法相同就像你为for
循环所做的那样。你不需要在R中使用;
。谢谢@rosscova,我不知怎么错过了那些大括号。我会说,“不需要在行上循环”。向量上的循环多次可以优于向量化操作,因为它避免了矩阵转换和方法分派…只是说:)谢谢Roman和@Davidernburg。这段代码运行得很好,比运行循环复杂度更低。@Davidernburg:你能对你说的部分多加一些见解吗?他可能是这方面的链接,对吗lp更好地理解它。我正在寻找你所说的优于操作和方法调度的更详细版本。@PD1搜索Patrick Burns的“R地狱”。我应该说“显式”循环。我们宇宙中的一切都是一个愚蠢的循环。我会说,“不需要在行上循环”。向量上的循环多次可以优于向量化操作,因为它避免了矩阵转换和方法分派…只是说:)谢谢Roman和@Davidernburg。这段代码运行得很好,比运行循环复杂度更低。@Davidernburg:你能对你说的部分多加一些见解吗?他可能是这方面的链接,对吗lp更好地理解它。我正在寻找你所说的优于操作和方法调度的更详细版本。@PD1搜索Patrick Burns的“R地狱”。我应该说“显式”循环。我们宇宙中的一切都是一个愚蠢的循环。