Разница между функциями $ и [] в dataframe - PullRequest
0 голосов
/ 13 февраля 2019

Как и почему, функции $ и [] данных в фрейме отличаются при назначении значений.Можно ли настроить строку abc.df[,"b"] = get("b") так, чтобы она имела тот же эффект, что и abc.df$b = get("b")

abc.df = NULL
a = 1:10
abc.df = data.frame(a)
b_vector = 11:20
b_list = rep(list(c(1,2)),10)

sp_colmns1 = c("b_vector")
# This works :
abc.df$b_vector_method1 = get(sp_colmns1) # Method 1
abc.df[,"b_vector_method2"] = get(sp_colmns1) # Method 2
print(abc.df)

sp_colmns2 = c("b_list")
# Similarly : 
# The same code as above, but does not work
# Only difference is b_list is a list
abc.df$b_list_method1 = get(sp_colmns2) # Method 1 (Works)
# TODO: Need to get the reason for & Solve the error on following line
# abc.df[,"b_list_method2"] = get(sp_colmns2) # Method 2 (Doesnt work)
print(abc.df)

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

После большого количества проб и ошибок это, кажется, работает.Решение оказывается довольно простым ...

list(get(sp_colmns2)) вместо get(sp_colmns2)

abc.df = NULL
a = 1:10
abc.df = data.frame(a)
b_vector = 11:20
b_list = rep(list(c(1,2)),10)

sp_colmns1 = c("b_vector")
# This works :
abc.df$b_vector_method1 = get(sp_colmns1) # Method 1
abc.df[,"b_vector_method2"] = get(sp_colmns1) # Method 2
print(abc.df)

sp_colmns2 = c("b_list")
# Similarly : 
# The same code as above, but does not work
# Only difference is b_list is a list
abc.df$b_list_method1 = get(sp_colmns2) # Method 1 (Works)
# TODO: Need to get the reason for & Solve the error on following line
abc.df[,"b_list_method2"] = list(get(sp_colmns2)) # Method 2 (Doesnt work)
print(abc.df)
0 голосов
/ 13 февраля 2019

Вы можете добавить список с любым именем "new" и изменить имя столбца на втором шаге с помощью строки, сохраненной в другом месте.

abc.df$new <- get(sp_colmns2)
names(abc.df)[which(names(abc.df) == "new")] <- "b_list_method2"

# > head(abc.df)
#   a b_list_method2
# 1 1           1, 2
# 2 2           1, 2
# 3 3           1, 2
# 4 4           1, 2
# 5 5           1, 2
# 6 6           1, 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...