Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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
如何为data.fame中的变量执行for循环?_R_For Loop_Dataframe - Fatal编程技术网

如何为data.fame中的变量执行for循环?

如何为data.fame中的变量执行for循环?,r,for-loop,dataframe,R,For Loop,Dataframe,我正在学习R中的for循环。我试图找出如何在data.frame中的特定变量中创建for循环。我研究了stackoverflow中的几个示例,例如,但没有一个对我所寻找的有用 作为使用mtcars数据集的示例,假设我要执行for循环: 查看cyl并定义cyl 4,6,8,写入并替换为字符串(低、中、高) for (i in mtcars$cyl) { if (mtcars$cyl == 4){ print("low")} if (mtcars$cyl == 6) {

我正在学习
R
中的
for循环
。我试图找出如何在
data.frame中的特定
变量中创建
for循环
。我研究了stackoverflow中的几个示例,例如,但没有一个对我所寻找的有用

作为使用
mtcars
数据集的示例,假设我要执行
for循环

查看
cyl
并定义
cyl 4,6,8,
写入并替换为
字符串(
低、中、高

for (i in mtcars$cyl) {
  if (mtcars$cyl == 4){ 
    print("low")} 
  if (mtcars$cyl == 6) {
    print ("medium")}
  if (mtcars$cyl == 8) {
    print ("high")}
    } 
当然不是这样

预期的情况如下:

                  mpg   cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
                   mpg   cyl       disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   medium    160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   medium    160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   low       108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   medium    258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   high      360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   medium    225 105 2.76 3.460 20.22  1  0    3    1
转换为:

                  mpg   cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
                   mpg   cyl       disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   medium    160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   medium    160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   low       108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   medium    258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   high      360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   medium    225 105 2.76 3.460 20.22  1  0    3    1

非常感谢您对解释的任何帮助

这种特殊的操作在没有循环的情况下是可能的

df = mtcars
df$cyl[df$cyl == 4] = "low" #Subset the cyl values equal to 4 and assign 'low'
#Repeat for other values
要不是跑圈,我会这样跑

df = mtcars

for (i in 1:length(df$cyl)) { #Iterate over the length of df$cyl
#You could also do "for (i in seq_along(df$cyl)"
#Run "seq_along(df$cyl)" and "1:length(df$cyl)" to understand what values are being generated
    if (df$cyl[i] == 4){ #Index df$cyl by [i]. If the ith value is 4, assign 'low'
        df$cyl[i] = "low"
    }
    if (df$cyl[i] == 6) {
        df$cyl[i] = "medium"
    }
    if (df$cyl[i] == 8) {
        df$cyl[i] = "high"
    }
}

这种特殊的操作在没有循环的情况下是可能的

df = mtcars
df$cyl[df$cyl == 4] = "low" #Subset the cyl values equal to 4 and assign 'low'
#Repeat for other values
要不是跑圈,我会这样跑

df = mtcars

for (i in 1:length(df$cyl)) { #Iterate over the length of df$cyl
#You could also do "for (i in seq_along(df$cyl)"
#Run "seq_along(df$cyl)" and "1:length(df$cyl)" to understand what values are being generated
    if (df$cyl[i] == 4){ #Index df$cyl by [i]. If the ith value is 4, assign 'low'
        df$cyl[i] = "low"
    }
    if (df$cyl[i] == 6) {
        df$cyl[i] = "medium"
    }
    if (df$cyl[i] == 8) {
        df$cyl[i] = "high"
    }
}

一件小事:在帮助初学者时,尽量鼓励使用
for(i in seq_-along(df$cyl)
而不是
for(i in 1:length(df$cyl))
@joran,谢谢!@d.b,非常感谢你的解释!:)一件小事:在帮助初学者时,尽量鼓励使用
for(i in seq_-along(df$cyl)
而不是
for(i in 1:length(df$cyl))
@joran,谢谢!@d.b,非常感谢您的解释!:)不需要循环:
mtcars$newcol,因此通常倾向于尽可能避免R中的循环。这就是为什么Franks响应和d.b答案的第一部分确实是更正确的解决方案。与其花时间在那些速度较慢、结果更复杂的循环上,不如考虑花点时间学习数组函数,并习惯于“应用”函数组。当涉及到代码的整洁性和可读性,以及执行给定操作的速度时,它们都是非常优秀的。@AronBoettcher非常感谢您的建设性建议!不需要循环:
mtcars$newcol,因此通常倾向于在R中尽可能避免循环。这就是为什么Franks的回答和D.B.答案的第一部分实际上是更正确的解决方案。与其花时间在那些速度较慢、结果更复杂的循环上,不如考虑花点时间学习数组函数,并习惯于“应用”函数组。当涉及到代码的整洁性和可读性,以及执行给定操作的速度时,它们都是非常优秀的。@AronBoettcher非常感谢您的建设性建议!