/ / डेटा फ्रेम के कई स्तंभों को कुशलतापूर्वक रूपांतरित करना - r

डेटा फ्रेम के कई कॉलम कुशलतापूर्वक बदलें - आर

मेरे पास एक डेटा फ्रेम है, और मैं सभी को बदलना चाहता हूंकॉलम (कहते हैं, लॉग या जो भी लें) एक निश्चित नाम से मेल खाने वाले कॉलम के साथ। इसलिए नीचे दिए गए उदाहरण में, मैं X.1 और X.2 का लॉग लेना चाहता हूं, लेकिन Y या Z.1 नहीं।

df <- data.frame(
Y = sample(0:1, 10, replace = TRUE),
X.1 = sample(1:10),
X.2 = sample(1:10),
Z.1 = sample(151:160)
)

# option 1, won"t work for dozens of fields
df$X.1 <- log(df$X.1)
df$X.2 <- log(df$X.2)

क्या यह करने के लिए एक अच्छा, कुशल तरीका है जब डेटाफ्रेम कई गीगाबाइट है?

उत्तर:

उत्तर № 1 के लिए 20

फ़ंक्शन के मामले में जो डेटा वापस करेगा।

cols <- c("X.1","X.2")
df[cols] <- log(df[cols])

अन्यथा आपको उपयोग करने की आवश्यकता होगी lapply या स्तंभों पर एक लूप। ये समाधान ऊपर के समाधान की तुलना में धीमे होंगे, इसलिए यदि आवश्यक हो तो ही उनका उपयोग करें

df[cols] <- lapply(df[cols], function(x) c(NA,diff(x)))
for(col in cols) {
df[col] <- c(NA,diff(df[col]))
}

जवाब के लिए 6 № 2
vars <- c("X.1", "X.2")

df[vars] <- lapply(df[vars], log)

उत्तर № 3 के लिए 1
df <- data.frame(
Y = sample(0:1, 10, replace = TRUE),
X.1 = sample(1:10),
X.2 = sample(1:10),
Z.1 = sample(151:160)
)
df

यह मानते हुए कि आप उन चरों को जानते हैं जिन्हें वास्तविक डेटाफ़्रेम (2 और 3 में रूपांतरण की आवश्यकता होती है) 2 और 3 चर में df को संदर्भित करता है जो X.1 और X.2 हैं

df2=log10(df[c(2:3)])
df2

यदि चर डेटाफ़्रेम में एक भाग हैं, तो आप उन्हें 1, 3, 6 वें 8 के लिए c (1,3,6,8: 10,13) की तरह चुन सकते हैं, 10 और 13 के माध्यम से। यह केवल संख्यात्मक चर के लिए काम करता है।