我有一個數據框df。對於每一列,我想通過寫入TRUE(= outlier)或FALSE(= no outlier)來添加另一列,指示該值是在我的簡單「異常值檢測閾值」之內還是之外。在數據框中爲每個現有數據框添加一個新列(用於異常值檢測)
下面的代碼:
df <- read.csv("<FILE>", header=TRUE, sep=";")
column_names <- colnames(df[,-1]) # first column is actually row name
for(name in column_names) {
med <- median(df[[name]], na.rm = TRUE)
std <- sd(df[[name]], na.rm = TRUE)
max <- med + 3 * std
min <- med - 3 * std
newcol <- paste(name, "outlier", sep="_") # create new column name
df <- within(df, newcol <- ifelse(name < max & name > min,"FALSE","TRUE"))
}
而不是對每個現有添加新列,剛剛入選一列「NEWCOL」被添加。在這種情況下,如何訪問變量newcol的實際值? Alread試圖得到(newcol)和[[newcol]]。
非常感謝您的幫助!
編輯: 解決方案看起來像這樣
df <- read.csv("<FILE>", header=TRUE, sep=";")
column_names <- colnames(df[,-1]) # first column is actually row name
for(name in column_names) {
med <- median(df[[name]], na.rm = TRUE)
std <- sd(df[[name]], na.rm = TRUE)
max <- med + 3 * std
min <- med - 3 * std
newcol <- paste(name, "outlier", sep="_")
df[[newcol]] <- with(df, ifelse(df[[name]] < max & df[[name]] > min,"FALSE","TRUE"))
}
對不起,想通了。在我最初的問題中添加了解決方案。 感謝您的幫助! – chrmar 2014-09-04 10:27:45
@chrmar您不應編輯問題以包含答案。如果您有不同的答案,請將其作爲解決方案發布,以便社區可以爲無法應付此問題的未來用戶高舉/低投票。 – MrFlick 2014-09-04 13:49:49