Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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中dataframe的多个列元素的值_R_Data Analysis_Data Manipulation - Fatal编程技术网

更改R中dataframe的多个列元素的值

更改R中dataframe的多个列元素的值,r,data-analysis,data-manipulation,R,Data Analysis,Data Manipulation,我试图通过向列的每个值添加和减去SD来更新一组列。SD用于给定列 下面是我提出的可复制代码,但我觉得这不是最有效的方法。有人能给我一个更好的方法吗 基本上,有20行9列,我只需要两个独立的数据帧,一个通过增加该列的SD来调整每列的值,另一个通过从该列的每个值中减去SD来调整 ##Example ##data frame containing 9 columns and 20 rows Hi<-data.frame(replicate(9,sample(0:20,20,rep=TRUE)))

我试图通过向列的每个值添加和减去SD来更新一组列。SD用于给定列

下面是我提出的可复制代码,但我觉得这不是最有效的方法。有人能给我一个更好的方法吗

基本上,有20行9列,我只需要两个独立的数据帧,一个通过增加该列的SD来调整每列的值,另一个通过从该列的每个值中减去SD来调整

##Example
##data frame containing 9 columns and 20 rows
Hi<-data.frame(replicate(9,sample(0:20,20,rep=TRUE)))  
##Standard Deviation calcualted for each row and stored in an object - i don't what this objcet is -vector, list, dataframe ?
Hi_SD<-apply(Hi,2,sd)
#data frame converted to matrix to allow addition of SD to each value
Hi_Matrix<-as.matrix(Hi,rownames.force=FALSE)
#a new object created that will store values(original+1SD) for each variable 
Hi_SDValues<-NULL
#variable re-created -contains sum of first column of matrix and first element of list. I have only done this for 2 columns for the purposes of this example. however, all columns would need to be recreated
Hi_SDValues$X1<-Hi_Matrix[,1]+Hi_SD[1]
Hi_SDValues$X2<-Hi_Matrix[,2]+Hi_SD[2]
#convert the object back to a dataframe
Hi_SDValues<-as.data.frame(Hi_SDValues)

##Repeat for one SD less
Hi_SDValues_Less<-NULL
Hi_SDValues_Less$X1<-Hi_Matrix[,1]-Hi_SD[1]
Hi_SDValues_Less$X2<-Hi_Matrix[,2]-Hi_SD[2]
Hi_SDValues_Less<-as.data.frame(Hi_SDValues_Less)
##示例
##包含9列20行的数据框

Hi添加SD不需要将数据帧转换为矩阵

Hi<-data.frame(replicate(9,sample(0:20,20,rep=TRUE)))  
Hi_SD<-apply(Hi,2,sd) # Hi_SD is a named numeric vector

Hi_SDValues<-Hi # Creating a new dataframe that we will add the SDs to

# Loop through all columns (there are many ways to do this)
for (i in 1:9){
    Hi_SDValues[,i]<-Hi_SDValues[,i]+Hi_SD[i]
}
# Do pretty much the same thing for the next dataframe
Hi_SDValues_Less <- Hi
for (i in 1:9){
    Hi_SDValues[,i]<-Hi_SDValues[,i]-Hi_SD[i]
}

Hi这是用于
sweep
的作业(在文档的R中键入
?sweep


Hi Great-我将此视为将SD应用于列(因此是元素2)到数据帧的扫描。但是我们在哪里指定减去SD呢。将SD添加到值中如何?再次查看
?sweep
,它显示用法:
sweep(x,MARGIN,STATS,FUN=“-”,check.MARGIN=TRUE,…)
。默认函数为“-”,将其更改为“+”,它将向值中添加
STATS
Hi <- data.frame(replicate(9,sample(0:20,20,rep=TRUE)))  
Hi_SD <- apply(Hi,2,sd)
Hi_SD_subtracted <- sweep(Hi, 2, Hi_SD)