Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中单个IF循环中的多个then条件_R - Fatal编程技术网

R中单个IF循环中的多个then条件

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

我对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   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地狱”。我应该说“显式”循环。我们宇宙中的一切都是一个愚蠢的循环。